将矩阵批量转换为R中的数据帧

时间:2013-06-10 13:15:10

标签: r data-manipulation

我有一堆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))))

3 个答案:

答案 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吗?