2015-05-11 2 views
1

У меня есть несколько списков, хранящихся в списках. Третий уровень содержит вектор с числовыми значениями и некоторые НС.Функция pmax в списках списков

Я хочу использовать pmax для поиска наивысшего значения между двумя векторами, которые имеют одинаковое положение.

pmax(low_all_res[[1]][[1]][[1]], high_all_res[[1]][[1]][[1]]) 

Это работает и выводит список. Но я хочу сделать это для большого количества списков с разными индексами. В основном я хочу сравнить low_all_res и high_all_res и получить максимальное значение между ними.

Моя структура данных выглядит следующим образом:

low_all_res[[1:5]][[1:5]][[1:10]] 

И это списки в последнем списке, я хочу, чтобы сравнить между низким и высоким.

Затем я попробовал:

comb_all_res <- list() 
for (k in 1:5){ 
    for(m in 1:5){ 
    for (i in 1:10){ 
     comb_all_res[[k]][[m]][[i]] <- pmax(low_all_res[[k]][[m]][[i]], high_all_res[[k]][[m]][[i]]) 
}}} 

Error in `*tmp*`[[k]] : subscript out of bounds 

Но получаю ошибку, как показано на рисунке.

Я также пробовал подход с временными файлами, но я думаю, что я использую неправильные операторы индексирования для файлов tmp. Этот код выглядит так, но я пробовал много разных подходов. Код работает, но я получаю только результаты для последних 10 векторов.

comb_all_res <- list() 
tmp_low <- list() 
tmp_high <- list() 
tmp_low2 <- list() 
tmp_high2 <- list() 

for (i in 1:10){ 

    for (k in 1:5){ 

    tmp_low <- low_all_res[[k]] 
    tmp_high <- high_all_res[[k]] 

    for(m in 1:5){ 

    tmp_low2 <- tmp_low[[m]] 
    tmp_high2 <- tmp_high[[m]] 

    comb_all_res[[i]] <- pmax(tmp_low2[[i]], tmp_high2[[i]]) 

}}} 

Может кто-нибудь критиковать мой код, так что я могу получить его прямо?

+1

Можете ли вы привести некоторый воспроизводимый пример (например, некоторые списки)? – DatamineR

+0

Это неверно из-за осмотра: 'low_all_res [[1: 5]] [[1: 5]] [[1:10]]'. Функция [["не принимает векторы с несколькими элементами. Таким образом, это не может быть вашими данными, и вам нужно отправить пример с кодом, который бы не выдавал ошибку. –

+0

Я новичок в Stackexchange. Я просто использовал 1: 5, чтобы показать, что есть 5 элементов. Это вложенный список. Список 1 имеет 5 элементов, которые представляют собой списки с каждыми 5 элементами, которые находятся в структуре дерева. Мои данные находятся в конце этого дерева. и 10 векторов с числами (я попытался показать, что с 1:10 в конце). Я приведу примерный код завтра, потому что я точно не знаю, как это сделать прямо сейчас. –

ответ

0

Вы можете попробовать следующее:

# Some fake data: 
set.seed(123) 
list_1 <- list(list(list(1:5), list(rep(3,5)), list(sample(1:10, 5))), list(list(sample(10:15)), list(rep(10,5)), list(sample(100:110, 5)))) 
list_2 <- list(list(list(5:1), list(rep(5,5)), list(sample(10:1, 5))), list(list(sample(15:10)), list(rep(20,5)), list(sample(1000:110, 5)))) 

pmax(unlist(list_1), unlist(list_2)) 
[1] 5 4 3 4 5 5 5 5 5 5 8 10 4 7 6 11 12 13 14 15 15 20 20 
[24] 20 20 20 471 743 870 145 200 

Чтобы поместить результаты в список аналогичной структуры в качестве исходных списков вы можете сделать следующее (спасибо Ананда Mahto кто helped to find relist):

relist(pmax(unlist(list_1), unlist(list_2)), skeleton = list_1) 
[[1]] 
[[1]][[1]] 
[[1]][[1]][[1]] 
[1] 5 4 3 4 5 


[[1]][[2]] 
[[1]][[2]][[1]] 
[1] 5 5 5 5 5 


[[1]][[3]] 
[[1]][[3]][[1]] 
[1] 8 10 4 7 6 



[[2]] 
[[2]][[1]] 
[[2]][[1]][[1]] 
[1] 11 12 13 14 15 15 


[[2]][[2]] 
[[2]][[2]][[1]] 
[1] 20 20 20 20 20 


[[2]][[3]] 
[[2]][[3]][[1]] 
[1] 471 743 870 145 200 
+0

BTW: ваш 'mapply' не нужен,' pmax (unlist (list_1), unlist (list_2)) 'достаточно. – sgibb

+0

Вы правы! : blush:)) – DatamineR

+0

Это то, что я хочу. И я могу заставить функцию pmax работать. То, что я не могу сделать, - сохранить результаты в другом списке с той же структурой. Возможно, я должен был использовать dataframes с факторами. Но, увы, на данный момент я застрял в списках, потому что узнал, что если вам нужны 25 последовательных нумерованных кадров данных, лучше использовать списки. Я довольно новичок в этом моделировании. У меня в основном 250 наборов данных. Я помещаю их в 5 списков в зависимости от того, что я сделал с ними. Каждый из этих 5 списков состоит из следующих 5 списков с 10 списками в, –

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