将向量列表与R中的数据帧列表合并

rev*_*er3 2 for-loop r list lapply

我有一个数据帧lsD列表和一个向量列表lsV.向量的长度与数据帧中的行数相同(在玩具示例中= 5).

我想将向量添加为每个数据帧的附加列.我得到了for循环,但我的一般问题是:如何在没有名称的情况下迭代两个列表for?有lapply办法做到这一点吗?

这是一个玩具示例和我使用for循环的解决方案:

lsV <- list(x = sample(LETTERS[1:5], 5,replace=T), 
            y = sample(LETTERS[1:5], 5, replace=T), 
            z=sample(LETTERS[1:5], 5, replace=T))

lsD <- list(x = data.frame(matrix(sample(LETTERS[1:5], 20,replace=T), ncol=4)), 
        y = data.frame(matrix(sample(LETTERS[1:5], 20,replace=T), ncol=4)),
        z =  data.frame(matrix(sample(LETTERS[1:5], 20,replace=T), ncol=4)))

for (i in 1:length(lsV)) {lsD[[i]]<-cbind(lsD[[i]], lsV[[i]])}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我尝试了以下,但当然它没有用.谢谢!

lapply(names(lsD), function(X) {lsD$X<-cbind(lsD$X, lsV$X)})
Run Code Online (Sandbox Code Playgroud)

MrF*_*ick 5

这个Map功能在这里很有用

 Map(cbind, lsD, Z=lsV)
Run Code Online (Sandbox Code Playgroud)

双方Mapmapply都采用风格的函数接受多个参数,同时在它们之间迭代.

lapply(names(lsD), function(X) {lsD$X<-cbind(lsD$X, lsV$X)})
Run Code Online (Sandbox Code Playgroud)

将永远不会工作,因为您不能使用'$'运算符的变量名称.您可以使用

lapply(names(lsD), function(X) {lsD[[X]]<-cbind(lsD[[X]], lsV[[X]])})
Run Code Online (Sandbox Code Playgroud)