2012-04-28 165 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

相关问题