我有两个大型列表
,每个列表有 1000 个元素
,例如:
list.A
$ V1 : num [1:141089] 1 2 3 4 5 ...
$ V2 : num [1:141089] 2 1 4 3 6 ...
$ ..
$ V1000 : num [1:141089] 5 6 7 8 9 ...
list.B
$ V1 : num [1:141089] 5 4 3 2 1 ...
$ V2 : num [1:141089] 4 5 2 3 0 ...
$ ..
$ V1000 : num [1:141089] 9 8 7 6 5 ...
我想通过第二个列表中的所有向量
对一个列表
中的第n向量执行操作列表
。
例如:list.A
中的 V1
与 list.B
中的 V1
、V2
> 在 list.B
中,直到 list.B
中的 V1000
。对于 V2
也是如此,直到 list.A
中的 V1000
。
到目前为止,我的代码如下所示。
list.diff <- Map(function(num1, num2) sum(abs(num1 - num2)/20)/(141089), list.A, list.B)
通过在 R 中使用 Map
,我只能对一个列表中的第 nth 向量
执行操作/sup> 向量
在第二个列表中。例如,list.A
中的 V1
与 list.B
中的 V1
,然后是 V2<
list.A
中的/code> 与 list.B
中的 V2
。
有什么建议可以解决这个问题吗?我是 R 和 stackoverflow 的新手。非常感谢您花时间回答。
最佳答案
您可以使用嵌套的 lapply()
和 sapply()
调用:
set.seed(13)
list.A <- setNames(
replicate(3, sample(0:9, 3, replace = TRUE), simplify = FALSE),
paste0("V", 1:3)
)
list.B <- setNames(
replicate(3, sample(0:9, 3, replace = TRUE), simplify = FALSE),
paste0("V", 1:3)
)
list.diff <- lapply(
list.A,
\(num1) sapply(list.B, \(num2) mean(abs(num1 - num2)/20))
)
list.diff
$V1
V1 V2 V3
0.2666667 0.1166667 0.1833333
$V2
V1 V2 V3
0.2333333 0.1500000 0.1833333
$V3
V1 V2 V3
0.15000000 0.13333333 0.06666667
注意,我还将 sum(...)/141089
简化为 mean(...)
。
关于r - 在 R 中的两个向量列表之间执行运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74876738/