2016-06-15 3 views
2

Я новичок в R и по-прежнему пытаюсь использовать свою модель вокруг семейства apply вместо использования циклов.добавить элемент-элемент по элементам вложенного списка в R

У меня есть два списка, один вложенных, а другие не, как состоящие из символов:

>lst1 <- list(c("ABC", "DEF", "GHI"), c("JKL", "MNO", "PQR")) 
>lst2 <- c("abc", "def") 

Я хотел бы создать третий список таким образом, что каждый элемент lst2 добавляются как последний элемент из соответствующий подсписок в lst1. Нужный результат выглядит следующим образом:

>lst3 
[[1]] 
[1] "ABC" "DEF" "GHI" "abc" 

[[2]] 
[1] "JKL" "MNO" "PQR" "def" 

Мой опыт до сих пор в R говорит мне, что, вероятно, это способ сделать это без написания цикла явно.

+1

я сделаю 'mapply (с, lst1, lst2, упрощать = F)', но это, вероятно, не то, что вы ищете («no loop»)? – lukeA

+0

Работает отлично. Благодаря! –

ответ

4

Вы можете использовать Map, который делает именно то, что mapply(..., simplify = F) делать:

Map(c, lst1, lst2) 
[[1]] 
[1] "ABC" "DEF" "GHI" "abc" 

[[2]] 
[1] "JKL" "MNO" "PQR" "def" 
+0

Краткий. Благодаря! –

0

lapply не будет делать то, что вам нужно. Вы можете использовать цикл с append, чтобы сделать это:

list1 <- list(c("ABC","DEF","GHI"),c("JKL","MNO","PQR")) 
list2 <- c("abc","def") 

listcomplete <- list(c("ABC","DEF","GHI","abc"),c("JKL","MNO","PQR","def")) 

for (i in 1:length(list2)) { 
    list1[[i]] <- append(list1[[i]],list2[i]) 
} 

Результаты:

> list1 
[[1]] 
[1] "ABC" "DEF" "GHI" "abc" 

[[2]] 
[1] "JKL" "MNO" "PQR" "def" 
+0

Это работает, но я хотел избежать написания цикла. –

1

Вы можете определенно использовать lapply если вы применить функцию по длине вашего lst1 вектора. Это работает:

lapply(1:length(lst1),function(i) append(lst1[[i]],lst2[[i]])) 

[[1]] 
[1] "ABC" "DEF" "GHI" "abc" 

[[2]] 
[1] "JKL" "MNO" "PQR" "def" 
+0

Отлично работает. Спасибо за предложение. –

 Смежные вопросы

  • Нет связанных вопросов^_^