我有一堆R矩阵需要转换为数据帧,我希望我能自动完成这个过程。
x = matrix(rnorm(100), 10, 10)
y = matrix(rnorm(100), 10, 10)
z = matrix(rnorm(100), 10, 10)
x = as.data.frame(x)
y = as.data.frame(y)
z = as.data.frame(z)
这不起作用:
lapply(c('x', 'y', 'z'), function(i) assign(i, as.data.frame(get(i))))
答案 0 :(得分:2)
请勿使用lapply()
。您不打算返回列表。
for (i in c('x', 'y', 'z')) assign(i, as.data.frame(get(i)))
答案 1 :(得分:1)
如果你查看?assign
的帮助文件,你会发现以下用法:
assign(x, value, pos = -1, envir = as.environment(pos),
inherits = FALSE, immediate = TRUE)
如果您确实要这样做,请将envir = .GlobalEnv
添加到assign
语句中,这些对象将被覆盖。
答案 2 :(得分:0)
你可以很好地在矩阵上使用mapply
。矩阵是一个具有维度属性的向量,因此在矩阵上运行mapply
(只要行数和列数的乘积就能得到结果),然后将结果标注回正确的大小矩阵:
x = matrix(rnorm(16), 4)
y = matrix(rnorm(16), 4)
z = matrix(rnorm(16), 4)
matrix( mapply( sum , x , y , z ) , ncol = ncol(x) )
# [,1] [,2] [,3] [,4]
#[1,] -0.2707872 -1.3272743 0.4656883 0.1357950
#[2,] 0.7026622 -0.7754597 -1.1339546 -1.2705671
#[3,] 1.2174994 0.2062436 -0.8471821 -1.5186123
#[4,] 3.3559925 1.7008927 1.7765929 0.4737344
并且,正如已经指出的那样,比使用data.frames快得多。您打算与mapply
一起使用的功能是什么?有什么理由不起作用,但是可以使用data.frames吗?