gpt4 book ai didi

r - 为什么data.frame上的 “^”返回矩阵而不是像 “*”那样返回data.frame?

转载 作者:行者123 更新时间:2023-12-03 11:41:47 26 4
gpt4 key购买 nike

这个问题是由data.table上的bug filed here by Abiel Reinhart引起的。我注意到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相同的结果。

我在 ?`^`中没有发现与此强制相关的任何内容。

编辑: Neal的答案清楚地说明了对 ^进行操作时 matrix返回 data.frame的原因。如果也可以回答有关 的问题,为什么在该段代码中省略 ^,那将是很棒的。

编辑2:我也发布了 here on R-help并得到Duncan的答复,说似乎没有信息记录。新闻中的这一变化(诚然,约书亚和邓肯也指出,这是一个相当古老的变化)。

最佳答案

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))

因此 ^以矩阵形式返回。

关于r - 为什么data.frame上的 “^”返回矩阵而不是像 “*”那样返回data.frame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19964897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com