Заменить элемент в списке списком - PullRequest
0 голосов
/ 19 декабря 2018

Учитывая список 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 голосов
/ 19 декабря 2018

Вот решение, использующее 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"
0 голосов
/ 19 декабря 2018

Это сделает это ...

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"))) сделает то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...