2016-07-13 2 views
0

좋아, 829 개의 요소가있는 목록 ("datalist")이 있습니다. 각 요소의 숫자는 1에서 676까지이며, 코드가 길이가 1보다 큰 벡터 인 경우 676의 시작 부분으로 돌아갑니다. 676보다 큰 목록의 값에서만 676을 뺄 수있는 방법을 찾고 있습니다. Ive는 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

보십시오 : 이상

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보다 작은 모든 값을 "정수 (0)"로 출력합니다. –

+0

두 번째 "하위"가 작동했습니다! –