22

この質問は、ここで Abiel Reinhart がに提出したバグによって動機付けられましたdata.table。同じことが起こることに気付きましdata.frameた。

次に例を示します。

DF <- data.frame(x=1:5, y=6:10)
> DF*DF
   x   y
1  1  36
2  4  49
3  9  64
4 16  81
5 25 100

> class(DF*DF) # [1] "data.frame"

> DF^2
      x   y
[1,]  1  36
[2,]  4  49
[3,]  9  64
[4,] 16  81
[5,] 25 100

> class(DF^2) # [1] "matrix"

なぜ「^」はそれを行列に強制するのですか? 何か案は?はパーサーによって に**変換されることに注意してください。^したがって、DF**2と同じ結果が得られDF^2ます。

には、この強制に関連するものは何も見つかりません?`^`

編集:ニールの答えは、 で操作されたときにを^返す理由を明確に示しています。なぜそのコードで取り残されているのかという質問にも答えられれば素晴らしいと思います.matrixdata.frame ^

編集 2: R-helpにも投稿しましたが、Duncan から情報登録がないように見えるという返信がありました。NEWS のこの変更 (確かに、Joshua と Duncan も指摘しているように、これはかなり古い変更です)。

4

1 に答える 1

22

Ops.data.frameデータ フレームの数学演算子を S3 ジェネリックとして実装します。最後の 2 行を次に示します。

if (.Generic %in% c("+", "-", "*", "/", "%%", "%/%")) {
    names(value) <- cn
    data.frame(value, row.names = rn, check.names = FALSE, 
        check.rows = FALSE)
}
else matrix(unlist(value, recursive = FALSE, use.names = FALSE), 
    nrow = nr, dimnames = list(rn, cn))

したがって^、行列として返されます。

于 2013-11-13T21:44:05.930 に答える