将函数参数制作成列表

4

我刚遇到的一个谜题:

x <- data.frame(a="hi",b="lo")
y <- data.frame(a="hi",b="lo")

getCommonNames <- function(...) {
  l <- list(...)
  sapply( l, names )
}

对比。

getCommonNames2 <- function(...) {
  sapply( list(...), names )
}


> getCommonNames2(x,y)
Error in lapply(X = X, FUN = FUN, ...) : 
  argument "X" is missing, with no default
> getCommonNames(x,y)
     [,1] [,2]
[1,] "a"  "a" 
[2,] "b"  "b" 

为什么当使用list(...)存储到变量中(或作为返回值)时,其内容会被正确转换为列表,但在表达式中使用时却不会?
这似乎是微不足道的,但它有点破坏了我的R解析模型,在该模型中,一切都会被解决,然后存储或传递给下一个参数。我学会了不忽略这种时刻,因为重建我的思维模型以考虑新信息通常会导致更深入的理解。
所以……这里发生了什么?

7
我不明白你遇到的错误是什么: > getCommonNames2(x,y) [,1] [,2] [1,] "a" "a" [2,] "b" "b (抱歉,无法正确显示多行输出)。 - Brian Diggs
我在另一台电脑上检查过,也无法复制。因此,我认为这是一个错误,正如已经指出的那样。投票关闭,因为太局限了。 - Ari B. Friedman
1个回答

1

这可能是您的 R 版本中的错误或当前环境中的某些不匹配。

我的版本没有复制相同的问题,它只是按预期进行。

> x <- data.frame(a="hi",b="lo")
> y <- data.frame(a="hi",b="lo")
> 
> getCommonNames <- function(...) {
+   l <- list(...)
+   sapply( l, names )
+ }
> 
> 
> getCommonNames2 <- function(...) {
+   sapply( list(...), names )
+ }
> 
> getCommonNames2(x,y)
     [,1] [,2]
[1,] "a"  "a" 
[2,] "b"  "b" 
> getCommonNames(x,y)
     [,1] [,2]
[1,] "a"  "a" 
[2,] "b"  "b" 


version.string R version 2.14.0 (2011-10-31)

同上:R版本2.15.1(2012年6月22日) - Brian Diggs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接