微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R 匹配来自不同列表的变量

如何解决R 匹配来自不同列表的变量

我想编写一个循环,其中将来自 3 个不同列表的值放入另一个函数

x = list(value1,value2,value3)
y = list(value1,value3)
z = list(value1,value3)

示例:函数 (x1,y1,z1)

我想将不同列表的同一列(x1,z1 .... x3,y3,z3)中的值插入到函数中。我怎么能这样做?

解决方法

这可以使用例如实现mapply

x <- list(1,2,3)
y <- list(4,5,6)
z <- list(7,8,9)

mapply(function(vx,vy,vz) vx + vy + vz,x,y,z)
#> [1] 12 15 18

或使用 purrr::pmap:

purrr::pmap(list(x,z),function(vx,vz) vx + vy + vz)
,

您可以使用 value1x 列表中获取 x[[1]]。同样,您可以使用 velue3 等从 y 列表中获得 y[[3]]

然后,您可以通过各种方式在您的函数中使用这些值,具体取决于您的函数与这些值的关系。

@stefan 展示了两种有效的方法来做到这一点。

如果你的函数必须从相同的索引中取三个值才能得到单个值,比如mean,你可以将列表组合成一个三列三行的矩阵,这样你就可以将此函数应用于具有单个索引的每一列或每一行。

x = list(c(-3,2))
y = list(c(10,-1,20))
z = list(c(0.7,0.5,0.9))
myData = cbind(x,z)
myData
#      x  y   z
# [1,] -3 10 0.7
# [2,]  0 -1 0.5
# [3,]  2 20 0.9

要获得 value1 的平均值:

mean(myData[1,])
# [1] 2.566667

假设您要计算每一行的均值和标准差,您可以编写一个函数来执行此操作

myfun = function(x){
 Mean = apply(x,1,mean)
    SD = apply(x,sd)
    result = rbind(Mean,SD)
 return(result)
}

然后将该函数应用于您的矩阵:

myfun(myData)
#         [,1]       [,2]      [,3]
# Mean 2.566667 -0.1666667  7.633333
# SD   6.698010  0.7637626 10.723961

这只是一个例子。许多其他更有效的方法是可能的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。