문제
r에서 여러 번 호출하는 함수가 있습니다. 나는 내가 전화 한 횟수를 추적하고 그것을 사용하여 기능 내에서 무엇을 해야하는지 결정합니다. 여기에 내가 지금 가지고있는 것은 다음과 같습니다.
f = function( x ) {
count <<- count + 1
return( mean(x) )
}
count = 1
numbers = rnorm( n = 100, mean = 0, sd = 1 )
for ( x in seq(1,100) ) {
mean = f( numbers )
print( count )
}
나는 함수의 범위를 벗어난 가변 수를 선언해야한다는 것을 좋아하지 않는다. C 또는 C ++에서는 정적 변수를 만들 수 있습니다. R 프로그래밍 언어에서 비슷한 일을 할 수 있습니까?
해결책
다음은 (프로그래밍 언어 의미에서) 폐쇄를 사용하는 한 가지 방법입니다. 즉, 기능에 의해서만 액세스 할 수있는 동봉 된 환경에 카운트 변수를 저장합니다.
make.f <- function() {
count <- 0
f <- function(x) {
count <<- count + 1
return( list(mean=mean(x), count=count) )
}
return( f )
}
f1 <- make.f()
result <- f1(1:10)
print(result$count, result$mean)
result <- f1(1:10)
print(result$count, result$mean)
f2 <- make.f()
result <- f2(1:10)
print(result$count, result$mean)
result <- f2(1:10)
print(result$count, result$mean)
다른 팁
여기에 또 다른 접근법이 있습니다. 이것은 타이핑이 적고 내 의견으로는 더 읽기 쉬운 것입니다.
f <- function(x) {
y <- attr(f, "sum")
if (is.null(y)) {
y <- 0
}
y <- x + y
attr(f, "sum") <<- y
return(y)
}
이 스 니펫과 개념의 더 복잡한 예는 찾을 수 있습니다. 이 R- 블로거 기사에서
제휴하지 않습니다 StackOverflow