r - 迭代R中的2个列表
问题描述
我想用 2 个列表进行迭代。
对于单个案例,我有一个 dataframedf1
和一个 vector v1
。
我的可重现示例如下。
df1 <- data.frame(n1 = c(2,2,0),
n2 = c(2,1,1),
n3 = c(0,1,1),
n4 = c(0,1,1))
v1 <- c(1,2,3)
现在,我使用此代码为每一行计算一个值(ses.value)
x <- (v1 - apply(df1, 1, mean))/apply(df1,1,sd)
假设我们将有一个包含多个数据框l1
的列表和一个向量列表l2
(每个列表具有相同数量的元素)现在,我想使用上面的代码为这些列表运行一个循环(元素l1
必须与l2
具有相同位置的元素)。
# 3 dataframes and 3 vectors
df1 <- data.frame(n1 = c(2,2,0), n2 = c(2,1,1), n3 = c(0,1,1), n4 = c(0,1,1))
df2 <- data.frame(n1 = c(1,6,0), n2 = c(2,1,8), n3 = c(0,2,1), n4 = c(0,7,1))
df3 <- data.frame(n1 = c(1,6,0), n2 = c(9,1,5), n3 = c(4,2,1), n4 = c(0,7,2))
v1 <- c(1,2,3)
v2 <- c(2,3,4)
v3 <- c(4,5,6)
# list
l1 <- list(df1,df2,df3)
l2 <- list(v1,v2,v3)
由于我的列表太大,使用for loop
可能不是一个好主意,有什么建议使用lapply
或类似的东西吗?
解决方案
我们可以使用Map
循环遍历每个元素的相应元素,list
然后根据 OP 的代码进行计算
Map(function(x, y) (y - apply(x, 1, mean))/apply(x,1,sd), l1, l2)
-输出
[[1]]
[1] 0.0 1.5 4.5
[[2]]
[1] 1.3055824 -0.3396831 0.4057513
[[3]]
[1] 0.1237179 0.3396831 1.8516402
此外,如果数据集真的很大,请使用dapply
from collapse
,这样更有效
library(collapse)
Map(function(x, y) (y - dapply(x, MARGIN = 1,
FUN = fmean))/dapply(x, MARGIN = 1, FUN = fsd), l1, l2)
推荐阅读
- javascript - JavaScript Discord Bot 没有响应
- wordpress - 有什么方法可以从 fb shop / catalogue 导出产品数据?
- reactjs - 如何在本机中动态导入图像?
- android - 如何为具有上下文、标题和消息的函数编写本地单元测试用例?
- python - 使用 Sqlalchemy 在多个外键上创建连接
- json - 如何从源代码中隐藏 Shopify 产品 #tags + #collections?这会影响#smartcollections 和/或#analytics #retargeting
- unity3d - Unity 在特定时刻启动音频
- .net-core - 验证没有公钥 (RSA) 的 JWT .net 核心 webapi
- android - 在 Android 中访问文件已更改
- python - Plotly Heatmap:如何使用 y 作为字符串?