r 连接两个列表并对它们的值求和

Pet*_*r.k 4 r

我有两个列表:x,y

> x
     carlo      monte simulation      model    quantum 
        31         31          9          6          6 
> y
      model      system temperature     quantum  simulation     problem 
         15          15          15          13          13          12
Run Code Online (Sandbox Code Playgroud)

我应该使用什么函数来获取:

simulation     model   quantum
        22        21        19
Run Code Online (Sandbox Code Playgroud)

我尝试像示例中那样合并它们,但它给了我一个错误:

merge(x,y,by=intersect(names(x),names(y)))产生:

fix.by(by.x, x) 中的错误:“by”必须指定唯一有效的列

该函数中没有参数如何处理值。最好使用什么功能?

intersect(names(x),names(y))将给出结果列表的名称,但如何将值汇总在一起?

lmo*_*lmo 5

您可以使用Mapin base R 返回一个列表。

Map("+", x[intersect(names(x),names(y))], y[intersect(names(x),names(y))])
$simulation
[1] 22

$model
[1] 21

$quantum
[1] 19
Run Code Online (Sandbox Code Playgroud)

mapply返回一个可能更有用的命名向量。

mapply("+", x[intersect(names(x),names(y))], y[intersect(names(x),names(y))])
simulation      model    quantum 
        22         21         19
Run Code Online (Sandbox Code Playgroud)

使用[intersect(names(x), names(y))]不仅会将 x 和 y 的内容子集为具有相交名称的内容,而且还会对操作的元素进行正确排序。

数据

x <- list(carlo=1, monte=2, simulation=9, model=6, quantum=6)
y <-list(model=15, system=8, temperature=10, quantum=13, simulation=13, problem="no")
Run Code Online (Sandbox Code Playgroud)