2014-09-11 2 views
1

데이터 열이있는 데이터 프레임이 있고 각 열의 일방 이동 평균을 계산하려고한다고 가정 해 보겠습니다. 왜추가 매개 변수 구문 적용

my.rollapply <- function(x){ 

    return(rollapply(x,moving.avg,FUN= mean, fill = NA,align = 'right', na.rm = TRUE)) 

} 

averageData <- apply(averageData, 2, my.rollapply) 

하지만

averageData <- apply(averageData, 2, rollapply, width = moving.avg, FUN = mean, fill = NA, align = 'right', na.rm = TRUE) 

나에게

Error in mean.default(newX[, i], ...) : 
    'trim' must be numeric of length one 

의 오류를 제공이 때문에 자체는 추가 매개 변수를 필요로이 일을 의미인가요합니까? 어떻게 적용 할 때 모든 매개 변수를 롤 어플리에 전달할 수 있습니까?

답변

0

설명 :

averageData <- apply(averageData, 2, rollapply, width = moving.avg, 
        FUN = mean, fill = NA, align = 'right', na.rm = TRUE) 

이 작동하지 (좋은 생각이 아니다) (어쩌면 더) 몇 가지 이유로됩니다

  1. FUN 모두 apply에 형식 인수입니다 및 rollapply.
  2. ...rollapply으로 전달되며 mean으로 전달됩니다. FUN 이후

는이 apply 호출에 일치하고 rollapply 호출에 ...를 통해 전달되지 것, apply에 형식 인수입니다. apply 루프 내부의 mean 전화를 의미

apply(X=averageData, MARGIN=2, FUN=mean, rollapply, width=moving.avg, 
     fill=NA, align='right', na.rm=TRUE) 

은 다음과 같습니다 다음 trim 인수는 함수가 아닌 숫자 인 rollapply 때문에 실패

mean(tmp[,i], ...) 
# which is equivalent to 
mean(tmp[,i], rollapply, width=moving.avg, fill=NA, align='right', na.rm=TRUE) 

그래서 당신의 apply 호출은 해석됩니다 길이 1의 벡터.

해결책 :

관계없이

library(xts) 
data(sample_matrix) 
x <- as.zoo(sample_matrix) 
y <- rollmeanr(x, k=moving.avg, fill=NA, na.rm=TRUE, by.column=TRUE) 
+0

확인 감사 :이 문제를 해결하는 방법은 rollapplyby.column 인수를 사용하는 것입니다! 미리 함수를 미리 정의하고 있지만, 응용 프로그램의 구조를 더 잘 이해하고 싶었습니다. 문제를 해결해 주셔서 감사합니다! – jtanman