【问题标题】:Passing more than one parameter to an anonymous function in R将多个参数传递给 R 中的匿名函数
【发布时间】:2012-04-28 14:47:00
【问题描述】:

为什么这不起作用?还是只是 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

【问题讨论】:

    标签: r function anonymous


    【解决方案1】:

    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 帮助文件:

    ... FUN 的可选参数。

    如果您希望将多个不同的参数传递给您的函数,请查看mapply

    【讨论】:

    • 这依赖于 b 也处于全局环境中。这与我给出的第二个解决方案没有什么不同,只是改变了你放在哪里。通常我们正在处理来自全局的对象。环境。所以预计 b 会来自那里。
    • 为了说明我对您的解决方案的看法:lapply(a, function(x,y) print(y), y=b)。看看它与我的#2 基本相同。尽管可以,但最好不要将匿名函数的参数调用与传递给它的对象相同的东西,以提高可读性。
    • 嗯。你说得对,这两种情况并不像我最初想象的那么不同。我仍然认为使用 lapply 的 ... 传递它比使用默认匿名函数传递它更合适。
    • 我同意不使用相同的名称来帮助至少它具有解释力。
    【解决方案2】:

    您可以尝试将 a 和 b 放在一个列表中,如下所示:

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

    或指定一个参数以将 b 传递给:

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

    但我不太确定你在追求什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      相关资源
      最近更新 更多