首页 > 解决方案 > 将列表与 lapply() 函数组合时出现问题

问题描述

我正在努力寻找我的 R 代码中的错误。我有一个名为 lst 的列表,例如:

lst:

A   double[1 x 896]   1 2 3 4...
B   double[1 x 1025]   0 4 7 9...
C   double[1 x 1335]   1 2 3 4...   

我正在尝试将这些元素两两合并,它们具有相同的列名。我正在使用代码(在将多个数据框与重合列合并中建议)。

do.call(rbind, lapply(c(lst[j],lst[i]), subset, select = Reduce(intersect, lapply(c(lst[j],lst[i]), colnames))))

当我结合 A 和 B 时,一切正常:

do.call(rbind, lapply(c(lst[1],lst[2]), subset, select = Reduce(intersect, lapply(c(lst[1],lst[2]), colnames))))

但是当我尝试结合 A 和 C

do.call(rbind, lapply(c(lst[1],lst[3]), subset, select = Reduce(intersect, lapply(c(lst[1],lst[3]), colnames))))

我得到错误

Error in x[subset & !is.na(subset), vars, drop = drop] : subscript out of bounds

问题来自:

lapply(c(lst[1],lst[3]), subset, select = Reduce(intersect, lapply(c(lst[1],lst[3]), colnames)))

有人知道发生了什么吗?

标签: rlistdataframe

解决方案


我刚刚解决了这个问题。写作

aux <- c(lst[j],lst[i])
do.call(rbind, lapply(aux, subset, select = Reduce(intersect, lapply(aux, colnames))))

代替

do.call(rbind, lapply(c(lst[j],lst[i]), subset, select = Reduce(intersect, lapply(c(lst[j],lst[i]), colnames))))

事实上,我不知道有什么区别,但第一个有效。如果有人有一些见解,请告诉我。


推荐阅读