2011-07-26 67 views
88

我在R中具有功能f(var1, var2)。假設我們設置了var2 = 1,現在我想將函數f()應用於列表L。基本上,我希望得到一個新的列表L *與輸出具有多個參數的R應用功能

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

如何做到這一點無論是與applymapplylapply

+0

類似的問題:http://stackoverflow.com/questions/2545879/row-column-counter-in-apply-functions/28102021#28102021 –

回答

127

只需將var2作爲額外參數傳遞給其中一個應用函數即可。

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

sapply(mylist,myfxn,var2=var2) 

這通過同一var2myfxn每次呼叫。相反,如果您想讓每個電話myfxn獲得第一/第二/第三/等。 mylistvar2的元素,那麼你在mapply的域名。

+4

但要注意,'myfxn'可矢量化,在這種情況下,應該使用'myfxn(不公開(MYLIST),VAR2 = VAR2)' – baptiste

+0

原來例子是不清楚,但似乎是爲非量化。然而,點好了。 –

+0

是否可以將這項工作作爲一項功能「在飛行中」?這樣的事情: 'sapply(mylist,function(var1,var2)var1 * var2 },var = thisvar2)' 但是我得到一個錯誤,即參數2匹配多個正式參數 – emudrak

8

如果你的函數有兩個向量變量(如@Ari B.弗裏德曼提到的)必須計算本身對他們的每一個值,你可以使用mapply如下:

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

我使用RODBC連接到Oracle XE hr架構。我需要一個可以返回表中記錄數的函數。所以...

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

但是如何將它應用到表名向量?就是這樣。

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

作爲sapply做它的工作,將所述函數noOfRecords到hrTableNames的每一行中,R取代與hrTableNames的當前迭代值缺失的參數表名。

最後。

> barplot(t(x), las=2) 
相關問題