我正在尝试为数据表的列子集构造rowMeans。如果使用数据帧,代码可以工作,但不能作为数据表。为什么?
最小示例 - 下面的代码不会产生10x10输出:
IDnum <- c(101:110)
Name <- LETTERS[seq( from = 1, to = 10 )]
minExample <- as.data.table(replicate(10,sample(0:5,10,rep=TRUE)))
minExample <- cbind(IDnum, Name, minExample)
grep("V",names(minExample))
#-- Intermediate output omitted
minExample[ , grep("V", names(minExample))]
[1] 3 4 5 6 7 8 9 10 11 12
但这确实产生了正确的(10x10)输出:
minExample[ , 3:12]
但是,再次转换为数据框会产生预期的行为:
minExample2 <- as.data.frame(minExample)
grep("V", names(minExample2))
minExample2[ , grep("V",names(minExample2))]
Row V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 2 3 5 5 1 3 2 1 3 1
2 4 3 0 1 5 3 0 5 2 3
3 1 2 0 2 2 4 4 0 4 0
4 3 4 5 4 0 0 2 0 0 3
5 2 2 4 4 5 2 1 4 2 2
6 5 3 3 1 1 2 0 5 1 4
7 4 2 2 0 3 1 4 0 5 1
8 0 4 3 2 2 2 2 0 3 5
9 4 3 3 5 4 1 2 0 5 0
10 5 5 0 3 4 4 0 0 1 5
为什么会出现差异?
答案 0 :(得分:0)
minExample[ , grep("V", names(minExample)), with = FALSE]
至于为什么会出现这种情况,请查看data.table包文档中的第一个条目以及有关参数的讨论。默认情况下,with=TRUE
表示j位置的表达式被视为data.table中的变量。如果指定with=FALSE
,则将它们视为列名称的向量。在语法中,您为j位置提供了一个字符向量。这些是字符,而不是变量(在data.table中),因此它们不被识别。这与A=2
然后A+5
有效的原因相同,但A=2
,"A" + 5
没有。