我有两个清单
first = list(a = 1, b = 2, c = 3)
second = list(a = 2, b = 3, c = 4)
Run Code Online (Sandbox Code Playgroud)
我想合并这两个列表,以便最终产品
$a
[1] 1 2
$b
[1] 2 3
$c
[1] 3 4
Run Code Online (Sandbox Code Playgroud)
有这么简单的功能吗?
And*_*rei 101
如果列表总是具有相同的结构,如示例中那么,则更简单的解决方案是
mapply(c, first, second, SIMPLIFY=FALSE)
Run Code Online (Sandbox Code Playgroud)
42-*_*42- 23
这是Sarkar对modifyList函数的一个非常简单的改编.因为它是递归的,它将处理比复杂情况更复杂的情况mapply,并且它将通过忽略'first'中不在'first'中的项来处理不匹配的名称情况.
appendList <- function (x, val)
{
stopifnot(is.list(x), is.list(val))
xnames <- names(x)
for (v in names(val)) {
x[[v]] <- if (v %in% xnames && is.list(x[[v]]) && is.list(val[[v]]))
appendList(x[[v]], val[[v]])
else c(x[[v]], val[[v]])
}
x
}
> appendList(first,second)
$a
[1] 1 2
$b
[1] 2 3
$c
[1] 3 4
Run Code Online (Sandbox Code Playgroud)
Aar*_*ica 12
这里有两个选项,第一个:
both <- list(first, second)
n <- unique(unlist(lapply(both, names)))
names(n) <- n
lapply(n, function(ni) unlist(lapply(both, `[[`, ni)))
Run Code Online (Sandbox Code Playgroud)
第二个,只有它们具有相同的结构才有效:
apply(cbind(first, second),1,function(x) unname(unlist(x)))
Run Code Online (Sandbox Code Playgroud)
两者都给出了期望的结果.
| 归档时间: |
|
| 查看次数: |
94736 次 |
| 最近记录: |