使用多个函数来`cbind`嵌套列表

Use multiple function to `cbind` nested list

我想使用 cbind 到带有数据框的嵌套列表。

举个例子。 nested 是嵌套列表。它有2个元素,每个元素有2个data.frame。所以,nested

第一个元素 = data.frame 1 + data.frame2/ 第二个元素 = data.frame 1 + data.frame 2

given<-replicate(2,list(data.frame(unlist(replicate(10,sample(c(0.2,0.3,0.4,0.1),2,replace=FALSE),simplify=FALSE)),ncol=2)))
colnames(given[[1]])<-c('a','b')
colnames(given[[2]])<-c('a','b')
nested<-list(given, given)

我正在尝试 cbind nested data.frame 的第二列,即 btarget,这是一个 10*2 data.frame.因此,它将生成 1 个包含 4 个元素的列表,这些元素是数据框。

target<-data.frame(sample(c("a","b","c","d"),10,replace=TRUE),sample(c("a","b","c","d"),10,replace=TRUE))
colnames(target)<-c("1st","2nd")
target

我尝试了 lapply 功能。

last<-lapply(seq_along(nested), function(x) function(y) cbind(target, nested[[x]][[y]][,c("b")]))

但是,它产生了错误。

[[1]]
function (y) 
cbind(target, nested[[x]][[y]][,c("b")]))
<bytecode: 0x00000000e092abe0>
<environment: 0x00000000e0948390>

肯定有问题,但我找不到原因。非常感谢您的帮助。

*附加信息:我写下预期的结果。

nested如下

[[1]]
[[1]][[1]]
        a   b
 [1,] 0.3 0.3
 [2,] 0.2 0.4
 [3,] 0.1 0.2
 [4,] 0.3 0.3
 [5,] 0.3 0.4
 [6,] 0.1 0.2
 [7,] 0.3 0.4
 [8,] 0.2 0.3
 [9,] 0.1 0.3
[10,] 0.3 0.4

[[1]][[2]]
        a   b
 [1,] 0.3 0.2
 [2,] 0.4 0.4
 [3,] 0.2 0.4
 [4,] 0.4 0.1
 [5,] 0.1 0.4
 [6,] 0.4 0.3
 [7,] 0.1 0.4
 [8,] 0.4 0.2
 [9,] 0.2 0.4
[10,] 0.4 0.2


[[2]]
[[2]][[1]]
        a   b
 [1,] 0.3 0.3
 [2,] 0.2 0.4
 [3,] 0.1 0.2
 [4,] 0.3 0.3
 [5,] 0.3 0.4
 [6,] 0.1 0.2
 [7,] 0.3 0.4
 [8,] 0.2 0.3
 [9,] 0.1 0.3
[10,] 0.3 0.4

[[2]][[2]]
        a   b
 [1,] 0.3 0.2
 [2,] 0.4 0.4
 [3,] 0.2 0.4
 [4,] 0.4 0.1
 [5,] 0.1 0.4
 [6,] 0.4 0.3
 [7,] 0.1 0.4
 [8,] 0.4 0.2
 [9,] 0.2 0.4
[10,] 0.4 0.2

target是..

   1st 2nd 
1    a   b 
2    a   a 
3    c   a 
4    b   a 
5    b   b 
6    c   c 
7    d   b 
8    a   a 
9    c   a 
10   d   b 

nested的每个data.frame有2列,分别是ab。我的预期结果是...

[1]
       1st 2nd   b
    1    a   b   0.3
    2    a   a   0.4
    3    c   a   0.2
    4    b   a   0.3
    5    b   b   0.4
    6    c   c   0.2
    7    d   b   0.4
    8    a   a   0.3
    9    c   a   0.3
    10   d   b   0.4


[2]
       1st 2nd   b
    1    a   b   0.2
    2    a   a   0.4
    3    c   a   0.4
    4    b   a   0.1
    5    b   b   0.4
    6    c   c   0.3
    7    d   b   0.4
    8    a   a   0.2
    9    c   a   0.4
    10   d   b   0.2


[3]
       1st 2nd   b
    1    a   b   0.3
    2    a   a   0.4
    3    c   a   0.2
    4    b   a   0.3
    5    b   b   0.4
    6    c   c   0.2
    7    d   b   0.4
    8    a   a   0.3
    9    c   a   0.3
    10   d   b   0.4


[4]
       1st 2nd   b
    1    a   b   0.2
    2    a   a   0.4
    3    c   a   0.4
    4    b   a   0.1
    5    b   b   0.4
    6    c   c   0.3
    7    d   b   0.4
    8    a   a   0.2
    9    c   a   0.4
    10   d   b   0.2

我们可以使用嵌套 lapply 并从每个列表中获取 "b" 列,然后 cbind 使用 target

lapply(nested, function(x) lapply(x, function(y) cbind(target, b = y[["b"]])))