r - 在 R 中的两个向量列表之间执行运算

标签 r list function vector

我有两个大型列表,每个列表有 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 ...

see list.A example figure

我想通过第二个列表中的所有向量对一个列表中的第n向量执行操作列表。 例如:list.A 中的 V1list.B 中的 V1V2 > 在 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 中的 V1list.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/

相关文章:

r - 如何根据正则表达式在 dplyr 中分隔列

r - text2vec 和 topicmodels 是否可以通过适合 LDA 的参数设置来生成类似的主题?

r - ggplot 多线图上缺少图例

java - 在 SWT 中为列表项创建右键单击选项

java - 意外的排序列表

python - 运行一个脚本,该脚本调用另一个脚本作为参数,而该脚本又具有参数

python - 当用户输入相同的输入两次(预期)时,如何将输入组合到输出?

带有非 GUI 设备的 R dev.copy() 用于批处理图形脚本

javascript - 将一个 javascript 函数的结果集成到另一个

python - 如何在自身内部引用列表的元素?