这是一些代码——我不明白为什么 rowSums 会中断,以及为什么更改 test3 的类会修复它。这似乎很奇怪。它是一个错误吗?如果没有,我错过了什么?
library(reshape)
test <- data.frame(x=1:5)
rowSums(test) # Works
class(test) # "data.frame"
## Trying to break rowSums; see below
class(test) <- c("data.frame", "cast_df")
rowSums(test) # Works, but see below
vars <- c("x", "y", "z")
test2 <- data.frame(label=rep(c("A", "B"), c(3, 3)),
variable=rep(vars, 2),
value=1:6)
test2.cast <- cast(test2, label ~ variable, value="value")
rowSums(test2.cast[, vars]) # Works
rowSums(test2.cast[, "y"]) # Breaks because of drop=TRUE
test3 <- test2.cast[, "y", drop=FALSE]
rowSums(test3) # Why does this break?
class(test3) # c("cast_df", "data.frame")
class(test3) <- "data.frame"
rowSums(test3) # Works! Why?
上下文:我有一个由演员生成的大型数据框。然后,我以编程方式在该数据框的几个不同列子集上调用 rowSums——当子集只有一列时,我注意到了这种行为。这是一个可重复的小例子。