我希望了解为什么会出现这种情况,以及如何更加优雅地处理。使用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
谢谢!
b
等于a
。 - hadley