2011-07-26 19 views
88

R'de f(var1, var2) işlevine sahibim. var2 = 1 ayarını yaptığımızı varsayalım ve şimdiişlevini L listesine uygulamak istiyorum. Temelde ben apply, mapply veya lapply biriyle bunu nasıl çıktılar R işlevi, çok sayıda parametre ile uygulamalı

[f(L[1],1),f(L[2],1),...,f(L[n],1)] 

ile yeni bir liste L * almak istiyorum?

+0

Benzer soru: http://stackoverflow.com/questions/2545879/row-column-counter-in-apply-functions/28102021#28102021 –

cevap

127

Sadece var2 uygulama işlevlerinden birine ek bir argüman olarak geçin.

mylist <- list(a=1,b=2,c=3) 
myfxn <- function(var1,var2){ 
    var1*var2 
} 
var2 <- 2 

sapply(mylist,myfxn,var2=var2) 

Bu myfxn her çağrıya aynı var2 geçer. Bunun yerine, her bir myfxn numaralı çağrıyı 1./2./3./etc. mylist ve var2 öğelerinin her ikisi de öğesi, daha sonra mapply etki alanındasınız.

+4

ama myfxn', vektörleştirilmiş edilebilir 'unutmayın ki bu durumda biri kullanmalıdır myfxn (liste dışı (mylist), var2 = var2) ' – baptiste

+0

Orijinal örnek belirsizdi, ancak vektörel olmayan gibi görünüyordu. Ancak, iyi alınmış bir nokta. –

+0

Bunu, "anında" bir işlev olarak çalıştırmanın bir yolu var mı? Böyle bir şey: 'sapply (mylist, function (var1, var2) { var1 * var2 }, var = thisvar2) Orada sorunu düşünmek @emudrak' Ama bir hatayı argümanı 2 maç birden biçimsel argümanlar – emudrak

8

sizin fonksiyonu aşağıdaki gibi mapply kullanabileceğiniz iki vektör değişkenleri ve (@Ari B. Friedman tarafından belirtildiği gibi) bunların her değerin kendisini hesaplamak gerekir: verir

vars1<-c(1,2,3) 
vars2<-c(10,20,30) 
mult_one<-function(var1,var2) 
{ 
    var1*var2 
} 
mapply(mult_one,vars1,vars2) 

:

> mapply(mult_one,vars1,vars2) 
[1] 10 40 90 
-4

Oracle XE hr şemasına bağlanmak için RODBC kullandım. Tablodaki kayıtların sayısını iade edebilecek bir fonksiyona ihtiyacım vardı. Yani ...

function(rodbcConnection, schemaName, tableName){ 
    results <- sqlQuery(rodbcConnection, paste("SELECT * FROM ", schemaName, ".", tableName)) 
    return(dim(results)[1]) 
} 

Ama nasıl tablo adlarının bir vektör bu uygulamak için? İşte nasıl.

> x <- sapply(hrTableNames, noOfRecords, rodbcConnection=connection, schemaName="hr") 

zamanda sapply hrTableNames her satır için işlev noOfRecords uygulanması, işini yapar, R hrTableNames mevcut yinelemeli değeri ile eksik parametre tabloismi değiştirir. Son olarak,

.

> barplot(t(x), las=2) 
İlgili konular