2016-04-27 3 views
1

У меня есть 2 списка. Один список содержит индексы следующим образом:R mapply два элемента списка мудрый

dd[1:3] 
[[1]] 
[1] 2 5 6 7 9 14 16 

[[2]] 
[1] 5 

[[3]] 
integer(0) 

Второй список содержит строки, как:

ee[1:3] 
[[1]] 
[1] "HP"  "A" "HP"  "HP"  
[5] "BD" "A" "A" "NY" 
[9] "U"   "HP"  "HP"  "HP"  
[13] "HP"  "S"  "HP"  ""  
[17] "0"    

[[2]] 
[1] "HP" "HP" "HP" "HP" "T" 
[6] "HP" "HP" "0"   

[[3]] 
[1] "HP" "HP" "0" 

Я хочу, чтобы применить индексы из списка дд до соответствующих элементов, например ee выберите 2, 5, 6, 7, 9, 14, 16 элементов из ee[[1]][1], а затем вычислите длину уникальных элементов. Я хочу сделать это в векторном виде, поскольку списки огромны.

Я знаю, что это простое приложение mapply, и что мне не хватает чего-то очевидного. Любая помощь приветствуется. Благодаря!

данные

dd <- list(c(2, 5, 6, 7, 9, 14, 16), 5, integer(0)) 
ee <- list(c("HP", "A", "HP", "HP", "BD", "A", "A", "NY", "U", "HP", 
      "HP", "HP", "HP", "S", "HP", "", "0"), 
      c("HP", "HP", "HP", "HP", "T", "HP", "HP", "0"), c("HP", "HP", "0")) 
+0

Спасибо! Не знал о «карте». На самом деле, я также хочу вычислить «длину» уникальных элементов. Теперь я могу сделать отдельный 'lapply' с' length' и 'unique' на выходе, полученном' Map', но есть ли способ сделать это в сочетании с 'Map', поскольку это будет быстрее? –

+1

Вы должны упомянуть, что в вашем вопросе – rawr

+0

Обновлен вопрос. –

ответ

2

Вы можете сделать это таким образом, используя mapply:

mapply(function(x,y){ 
    table(x[y]) 
    },ee,dd) 
+1

Спасибо! Это работает –

1

Другого варианта заключается в петлю над последовательностью одного list с помощью lapply, подмножество на основе индекса других и получить частоту элементов

lapply(seq_along(ee), function(i) table(ee[[i]][dd[[i]]])) 
Смежные вопросы