更新 - 我需要使用 100 多个二维表执行计算。我知道这些表可以作为 data.frames 或数组导入到 R 中。
这是一个说明我的问题的例子。为简单起见,我的许多表用d1、d2、dd2和dd3表示。请注意,我在列表中添加了更多 data.frames,因为@BondedDust 提出的解决方案是在列表中有 2 个 data.frames 而不是 4 个 data.frames 时将 'sum' 替换为 '+'。
d1 = mtcars
d2 = d1*2
dd2 = d2 * 2
dd3 = d2 * d2
下面,如果操作是“+”,d3 将是我想要的最终输出。但我需要一种方法来自动化这个过程。
d3 = d1+d2 + dd2 + dd3
> str(d3)
'data.frame': 32 obs. of 11 variables:
$ mpg : num 2793 2793 3279 2898 2229 ...
$ cyl : num 258 258 124 258 440 258 440 124 124 258 ...
$ disp: num 154720 154720 70740 401190 780120 ...
$ hp : num 73370 73370 52545 73370 184975 ...
$ drat: num 118.6 118.6 115.9 78.5 81.6 ...
$ wt : num 59.5 69.7 48.5 84.5 95.1 ...
$ qsec: num 1741 1857 2208 2404 1857 ...
$ vs : num 0 0 13 13 0 13 0 13 13 13 ...
$ am : num 13 13 13 0 0 0 0 0 0 0 ...
$ gear: num 124 124 124 75 75 75 75 124 124 124 ...
$ carb: num 124 124 13 13 38 13 124 38 38 124 ...
所以我尝试使用列表,但是当我使用带有 '+' 的 do.call 和列表中的 4 个 data.frame 时,它不起作用。
l1 = list(d1,d2,dd2,dd3)
str(l1)
> str(l1)
List of 4
$ :'data.frame': 32 obs. of 11 variables:
..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
d4 = do.call('+', l1)
Error in `+`(list(mpg = c(21, 21, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, :
unused arguments (list(mpg = c(84, 84, 91.2, 85.6, 74.8, 72.4, 57.2, 97.6, 91.2, 76.8, 71.2, 65.6, 69.2, 60.8, 41.6, 41.6, 58.8, 129.6, 121.6, 135.6, 86, 62, 60.8, 53.2, 76.8, 109.2, 104, 121.6, 63.2, 78.8, 60, 85.6), cyl = c(24
这篇文章R - Vector/ Array Addition显示了类似的问题,但他们使用数组而不是 data.frames。因此,我尝试使用以下方法将 data.frames 转换为数组:
d5 = lapply(l1, function(x) data.matrix(x))
但是 d5 没有正确的结构,例如:
d6 = apply(d5,1:2,sum)
所以,我不确定问题是否出在我使用 lapply、do.call 或什么的方式上。任何帮助或方向将不胜感激。抱歉,如果我错过了之前已经解决过这个问题的帖子,我整天都在网上搜索并尝试了许多不同的选项,但都没有得到理想的结果。谢谢!