【发布时间】:2018-02-27 16:30:44
【问题描述】:
我注意到setorder 似乎改变了它根本不应该触及的变量。一个简单的代码示例最好地说明了这一点:
library(data.table)
x <- 1:3
y <- 3:1
data <- data.frame(x.dat=x, y.dat=y)
setorder(data, y.dat)
x
变量 x 已重新排序,现在也显示为 3 2 1 。对我来说,这看起来像是 setorder 命令中的一个错误。
如果在数据框定义和setorder之间插入一些额外的修改x的命令,效果就会消失。
编辑:我只是重新运行代码,效果就消失了。从现在到一年前我的第一篇文章,这个问题似乎已经解决了。特别是1.10。 data.table 的版本有效果,在 1.11.8 中它可以正常工作。
【问题讨论】:
-
是的,我同意这是一种奇怪的行为,
x不应通过在data上运行setorder来重新排序。 -
如果在
data.table上使用setorder,x的顺序不会改变:data <- data.table(x.dat = x, y.dat = y);setorder(data, y.dat);x -
如果我们在
setorder的开头插入一行if (!is.data.table(x)) x = copy(x),这个问题就会消失,支持这种行为可能与 setorder 是通过引用对 x 操作还是对x. -
无法复制。
标签: r sorting dataframe data.table