2016-07-13 3 views
0

Итак, у меня есть список (названный «datalist») с 829 элементами. Числа в каждом элементе находятся в масштабе от 1 до 676, но мой код циклически возвращается к началу 676, когда элемент представляет собой вектор длиной больше единицы. Я ищу способ вычесть 676 только из значений списка, которые больше 676. Я пытался использовать lapply безрезультатно. Ниже приведен небольшой раздел списка, за которым следует мой код и сообщение об ошибке. Спасибо!Как вычесть из отдельных элементов списка

[[825]] 
[1] 429 496 

[[826]] 
[1] 8 895 1181 

[[827]] 
[1] 6 

[[828]] 
[1] 901 916 1298 1299 1302 1307 

Код:

sub <- function(x){ 
for(i in datalist[x]){ 
    if(i > 676) 
    i = i-676 
} 
} 

lapply(1:829, sub) 

код возвращает все элементы списка, как NULL и выдает следующее сообщение об ошибке.

Сообщение об ошибке:

1-50: In if (i > 676) i = i - 676 : 
the condition has length > 1 and only the first element will be used 

То, что я ищу, чтобы иметь выходной код:

[[825]] 
[1] 429 496 

[[826]] 
[1] 8 219 505 

[[827]] 
[1] 6 

[[828]] 
[1] 225 240 622 623 626 631 
+0

Не совсем верю. –

+0

О, я вижу - вы не «вычитаете» (т. Е. Удаляете) из списка «вы вычитаете из каждого элемента списка» – SymbolixAU

+0

Я думаю, что вы все равно можете использовать ответы на другой вопрос. – SymbolixAU

ответ

1

Try:

sub <- function(x) {x[x > 676] <- x[x > 676] - 676} 
lapply(datalist, sub) 

Кроме того, если все значения больше 676 составляют менее 2 * 676, могут быть:

sub <- function(x) {x %% 676} #returns modulo 
+0

К сожалению, некоторые значения больше 2 * 676. Используя этот скрипт выводит все значения меньше 676 как «integer (0)» –

+0

Второй «под» работал! –

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