如何解决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)
,
您可以使用 value1
从 x
列表中获取 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 举报,一经查实,本站将立刻删除。