Aru*_*run 22 r operators exponentiation dataframe
这个问题是由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"
Run Code Online (Sandbox Code Playgroud)
为什么"^"将其强制转换为矩阵?有任何想法吗?请注意,由解析器**转换为^.所以,做DF**2会得到与之相同的结果DF^2.
我没有找到与此强制有关的任何内容?`^`.
编辑:尼尔的回答清楚地显示^了matrix在操作时返回的原因data.frame.如果可以回答关于为什么 ^被遗漏在那段代码中的问题,那就太棒了.
编辑2:我也在这里发布了R-help并得到了Duncan的回复,似乎没有信息注册.新闻中的这种变化(诚然,正如约书亚和邓肯所指出的那样,这是一个相当古老的变化).
Nea*_*ltz 22
Ops.data.frame 实现数据帧的数学运算符作为S3泛型,这是最后几行:
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))
Run Code Online (Sandbox Code Playgroud)
因此^作为矩阵返回.
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |