【发布时间】:2019-03-19 10:18:41
【问题描述】:
我有一个嵌套列表 (mylist),并且我想将 cbind 一个数据框 (colors) 自动添加到较低级别的列表 (iris) 中,前提是列表的名称包含特定的字符串 (iris),但我遇到了一些错误。
例子:
mylist <- list(favorites=list("iris"=iris[1:5,], "mtcars"=mtcars[1:5,], "ToothGrowth"=ToothGrowth[1:5,]), misc = list("air"=airquality))
colors <- data.frame(dark = "black", light = "white", mid = "violet")
我只想将colors 附加到嵌套列表iris,本质上是:cbind(mylist$favorites$iris, colors)。我的真实数据集要大得多,无法在每个嵌套列表上手动使用cbind。
这样:
> cbind.fill(mylist$favoritres$iris, colors)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species dark light mid
1 5.1 3.5 1.4 0.2 setosa black white violet
2 4.9 3.0 1.4 0.2 setosa black white violet
3 4.7 3.2 1.3 0.2 setosa black white violet
4 4.6 3.1 1.5 0.2 setosa black white violet
5 5.0 3.6 1.4 0.2 setosa black white violet
我目前的解决方案尝试:
mylist <- lapply(mylist, function(x) {
if(grepl("iris", x$favorites)==TRUE){
x$favorites <- lapply(x$favorites, function(y) cbind(y, colors))
}; x
})
哪个会引发错误:
if (grepl("iris", x$favorites) == TRUE) { 中的错误: 参数长度为零
【问题讨论】:
-
cbind.fill,我希望colors的每一列中的条目与iris的所有行一起传播。更新示例
标签: r dataframe apply lapply mapply