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解析のメンタルモデルを破りました。このモデルでは、すべてが解決され、保存されるか、次の引数に渡されます。新しい情報を考慮に入れるためにメンタルモデルを再構築すると、物事の理解が深まることが多いため、そのような瞬間を無視しないことを学びました。

それで...ここで何が起こっているのですか?

4

1 に答える 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)
于 2012-08-07T18:47:33.530 に答える