0

我有一堆需要转换为数据帧的 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))))
4

3 回答 3

2

不要使用lapply(). 您不打算返回列表。

for (i in c('x', 'y', 'z')) assign(i, as.data.frame(get(i)))
于 2013-06-10T13:31:04.027 回答
1

如果您查看 的帮助文件?assign,您会发现以下用法:

assign(x, value, pos = -1, envir = as.environment(pos),
       inherits = FALSE, immediate = TRUE)

如果您真的想这样做,请添加envir = .GlobalEnv到您的assign语句中,对象将被覆盖。

于 2013-06-10T13:21:20.687 回答
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一起使用?

于 2013-06-10T13:30:59.243 回答