我刚遇到的一个谜题:
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解析模型,在该模型中,一切都会被解决,然后存储或传递给下一个参数。我学会了不忽略这种时刻,因为重建我的思维模型以考虑新信息通常会导致更深入的理解。
所以……这里发生了什么?
> getCommonNames2(x,y) [,1] [,2] [1,] "a" "a" [2,] "b" "b
(抱歉,无法正确显示多行输出)。 - Brian Diggs