2012-04-28 166 views
1

爲什麼這不起作用?或者只是R的工作方式?將多個參數傳遞給R中的匿名函數

感謝 JJ

a <- c(1,2,3) 
    b <- 5 
    lapply(a, function(x) print(x)) # works 

    lapply(a, function(x,b) print(b)) # doesn't work. 

    I get -- 
    Error in FUN(c(1, 2, 3)[[1L]], ...) : 
     argument "b" is missing, with no default 

回答

2

你可以嘗試把A和B在列表如下:

lapply(list(a, b), function(x) print(b)) 

或指定argumant傳遞b鍵爲:

lapply(a, function(x, y=b) print(y)) 

但我不確定你在做什麼。

3

lapply只傳遞一個參數,因爲它只被設計爲有一個參數不同。如果你只是想一起傳遞額外的參數,把它們作爲附加選項lapply

lapply(a, function(x,y) print(y), y=b) 
[1] 5 
[1] 5 
[1] 5 
[[1]] 
[1] 5 

[[2]] 
[1] 5 

[[3]] 
[1] 5 

lapply幫助文件:

...可選參數樂趣。

如果您希望將多個不同的參數傳遞給您的函數,請參閱mapply

+0

這也依賴於b在全球環境中。除了把你放在哪裏以外,我給出的第二種解決方案沒有什麼不同。通常我們正在處理來自glob的對象。 ENV。所以預計b會來自那裏。 – 2012-04-28 15:10:21

+0

爲了說明我認爲你的解決方案是這樣的:'lapply(a,function(x,y)print(y),y = b)'。看看它和我的#2基本上是一樣的。可讀性最好不要將匿名函數的參數調用爲儘可能傳遞給它的對象。 – 2012-04-28 15:18:53

+0

嗯。你說得對,這兩起案件並沒有我最初想象的那麼不同。我仍然認爲使用lapply的'...'傳遞它比使用默認匿名函數傳遞它更合適。 – 2012-04-28 16:01:45

相關問題