我希望深入瞭解爲何發生這種情況,以及我如何更有說服力地做到這一點。爲什麼sapply返回需要轉置的矩陣,然後轉置的矩陣不會附加到數據幀?
當我使用sapply時,我希望它返回一個3x2矩陣,但它返回一個2x3矩陣。爲什麼是這樣?爲什麼將它附加到另一個數據框很困難?
a <- data.frame(id=c('a','b','c'), var1 = c(1,2,3), var2 = c(3,2,1))
out <- sapply(a$id, function(x) out = a[x, c('var1', 'var2')])
#out is 3x2, but I would like it to be 2x3
#I then want to append t(out) (out as a 2x3 matrix) to b, a 1x3 dataframe
b <- data.frame(var3=c(0,0,0))
,當我嘗試將這些,
b[,c('col2','col3')] <- t(out)
,我得到的錯誤是:
Warning message:
In `[<-.data.frame`(`*tmp*`, , c("col2", "col3"), value = list(1, :
provided 6 variables to replace 2 variables
雖然下面似乎得到期望的結果:
rownames(out) <- c('col1', 'col2')
b <- cbind(b, t(out))
我無法操作Ë變量:
b$var1/b$var2
回報
Error in b$var1/b$var2 : non-numeric argument to binary operator
謝謝!
什麼是你想用這個數據做什麼?你的例子並沒有做任何有意義的事情。 – hadley 2010-11-10 03:20:36
@hadley:該示例遵循R發佈準則,提供一個最小的可行示例。實際情況相當複雜,複雜性會削弱核心問題。我使用泰勒級數展開函數估計了20個不同參數的模型靈敏度,並接受了20x8數據幀作爲輸入。如果您願意,我很樂意發送完整的可重複使用的示例,但尚未準備好公開。 – 2010-11-10 04:19:38
你需要在容易理解的東西和捕捉你正在努力解決的問題的本質之間尋找一個快樂的媒介。在你現在的例子中,似乎你想讓'b'等於'a'。 – hadley 2010-11-10 13:50:24