I have
A <- rep(list(data.frame(a=c(1,2,3,2,1,4),b=c(7,3,1,2,2,1),c=c(2,3,7,2,2,8))),10)
B <- c(2,1,3,2,5,5)
and I would like to put B as a column of each data.frame in the list A
something like
[[1]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[2]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
I have found some stuff, but I can't figure out how works Map() or mapply()...
CodePudding user response:
The function you want here is lapply(). The lapply() function performs another function on each element of a list and returns a list.
A possible solution, using the simplified notation, suggested bellow, in a comment, by @BenNorris:
A <- rep(list(data.frame(a=c(1,2,3,2,1,4),b=c(7,3,1,2,2,1),c=c(2,3,7,2,2,8))),10)
B <- c(2,1,3,2,5,5)
lapply(A, cbind, d = B)
#> [[1]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[2]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[3]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[4]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[5]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[6]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[7]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[8]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[9]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[10]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
CodePudding user response:
Try Map like this
> Map(cbind, A, d = list(B))
[[1]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[2]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[3]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[4]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[5]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[6]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[7]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[8]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[9]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[10]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
CodePudding user response:
Similar option in tidyverse
library(dplyr)
library(dplyr)
map(A, mutate, d = B)
-output
[[1]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[2]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
...
