R 为列表中的每个数据帧向函数传递不同的参数

R 为列表中的每个数据帧向函数传递不同的参数,r,lapply,R,Lapply,以下是我的数据的简化示例: 我有一个数据帧列表 set.seed(1) data1 <- data.frame(A = sample(1:10)) data2 <- data.frame(A = sample(1:10)) data3 <- data.frame(A = sample(1:10)) data4 <- data.frame(A = sample(1:10)) list1 <- list(data1, data2, data3, data4) 我想在l

以下是我的数据的简化示例:

我有一个数据帧列表

set.seed(1)
data1 <- data.frame(A = sample(1:10))
data2 <- data.frame(A = sample(1:10))
data3 <- data.frame(A = sample(1:10))
data4 <- data.frame(A = sample(1:10))
list1 <- list(data1, data2, data3, data4)
我想在
list1
中的每个数据帧中创建一个新列
C
,其中:

C = A * (B/nrow(A))
由于
B
的值来自
data5
,因此
B=10
用于
list1
中的第一个数据帧(即
data1
),而
B=20
用于第二个数据帧
data2
,依此类推

从我所读的内容来看,
mapply
可能是解决方案,但我正在努力解决如何在
list1
中的每个数据帧的所有行中指定单个值
B


如有任何建议,我们将不胜感激

您需要使用
Map
在不同的向量上循环或并行列出:

Map(函数(df,B)转换(df,C=A*(B/nrow(df))),列表1,数据5$B)
#> [[1]]
#>A C
#> 1   8  8
#> 2  10 10
#> 3   1  1
#> 4   6  6
#> 5   7  7
#> 6   9  9
#> 7   3  3
#> 8   4  4
#> 9   2  2
#> 10  5  5
#> 
#> [[2]]
#>A C
#> 1  10 20
#> 2   3  6
#> 3   2  4
#> 4   1  2
#> 5   9 18
#> 6   4  8
#> 7   6 12
#> 8   5 10
#> 9   8 16
#> 10  7 14
#> 
#> [[3]]
#>A C
#> 1   5 15
#> 2   7 21
#> 3   1  3
#> 4   4 12
#> 5   2  6
#> 6   6 18
#> 7  10 30
#> 8   3  9
#> 9   8 24
#> 10  9 27
#> 
#> [[4]]
#>A C
#> 1   3 12
#> 2   9 36
#> 3   6 24
#> 4   4 16
#> 5   2  8
#> 6   1  4
#> 7  10 40
#> 8   5 20
#> 9   7 28
#> 10  8 32
使用tidyverse可以更紧凑一些:

C = A * (B/nrow(A))
library(tidyverse)
map2(list1, data5$B, ~mutate(.x, C = A*(.y/nrow(.x))))