用列表替换列表中的项目

时间:2018-12-19 14:52:29

标签: r list

给出一个列表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")一样。

有什么建议吗?

2 个答案:

答案 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"