下面是一些代碼 - 我不明白爲什麼rowSums會在它發生中斷時,以及爲什麼更改test3的類會修復它。這看起來很奇怪。這是一個錯誤嗎?如果不是,我錯過了什麼?rowSums在由庫中生成的單列數據幀中重構(重塑) - 爲什麼?
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?
上下文:我有一個由cast生成的大數據框。然後,我以編程方式在該數據框的幾個不同子列上調用rowSums - 並且當子集只有一列時,我注意到了這種行爲。這是一個很小的可重複的例子。
答案可能是:不要這樣做。或使用'reshape2 :: dcast' –
相關問題和[答案](http://stackoverflow.com/a/17873683/1270695)這裏。 – A5C1D2H2I1M1N2O1R2T1