给出一个列表Z <- list("a"=1, "b"=2, "d"=3)
,我如何用列表替换例如项目1和3,这样最终的对象是:
> Z
$a
[[1]]
[1] TRUE
[[2]]
[1] "apple"
$b
[1] 2
$d
[[1]]
[1] TRUE
[[2]]
[1] "apple"
使用replace(Z, c(1,3), list(TRUE, "apple")
)将项1替换为TRUE
,将项3替换为"apple"
,就像使用赋值运算符Z[c(1,3)] <- list(TRUE, "apple")
一样。
有什么建议吗?
答案 0 :(得分:2)
这会做到的...
Z <- list("a"=1, "b"=2, "d"=3)
Z[c(1,3)] <- list(list(TRUE,"apple"))
Z
$`a`
$`a`[[1]]
[1] TRUE
$`a`[[2]]
[1] "apple"
$b
[1] 2
$d
$d[[1]]
[1] TRUE
$d[[2]]
[1] "apple"
或者Z <- replace(Z,c(1,3),list(list(TRUE,"apple")))
会做同样的事情。
答案 1 :(得分:0)
这是使用lapply
的解决方案。我花了大约10-15分钟来解决这个问题,列表替换项只在第一个元素处被截断。问题是我正在使用ifelse
来决定是返回列表还是返回原始元素。改用正式的if
else
语句解决了该问题。
Z <- list("a"=1, "b"=2, "d"=3)
lst <- list(TRUE, "apple")
indices <- c(1, 3)
output <- lapply(Z, function(x) {
if (x %in% indices) { lst } else { x }
})
output
$a
$a[[1]]
[1] TRUE
$a[[2]]
[1] "apple"
$b
[1] 2
$d
$d[[1]]
[1] TRUE
$d[[2]]
[1] "apple"