2013-03-22 4 views
9

R에서 이항 비율의 간격 추정에 적용 가능한 확률을 계산하기위한 일반적인 함수를 작성하려고합니다. 다양한 신뢰 구간 방법에 대해이 작업을 수행 할 예정입니다. 발트 (Wald), 클로퍼 - 피어슨 (Clopper-Pearson), HPD 간격.R 함수에서 인수로 함수 매개 변수

이상적으로는 간격을 계산하는 데 사용해야하는 메소드를 인수로 취할 수있는 함수가 하나 있습니다. 내 질문에 : 어떻게 다른 함수에 인수로 함수를 포함시킬 수 있습니까? 일례로서

는, I는 다음의 기능을 갖는 정확한 Clopper-피어슨 간격 :

# Coverage for Exact interval 
ExactCoverage <- function(n) { 
p <- seq(0,1,.001) 
x <- 0:n 

# value of dist 
dist <- sapply(p, dbinom, size=n, x=x) 

# interval 
int <- Exact(x,n) 

# indicator function 
ind <- sapply(p, function(x) cbind(int[,1] <= x & int[,2] >= x)) 

list(coverage = apply(ind*dist, 2, sum), p = p) 
} 

어디 정 (X는, n)은 적절한 간격을 계산하는 단순한 기능이다. I는 I는 커버리지 확률보다는 계산 구간의 각 방법에 대한 별도의 커버리지 함수를 계산하는 하나 개의 기능을 갖도록

Coverage <- function(n, FUN, ...) 
... 
# interval 
int <- FUN(...) 

을하고 싶다. 이것을하기위한 표준 방법이 있습니까? 나는 설명을 찾을 수 없었다.

감사, R에서 제임스

+1

https://github.com/hadle y/devtools/wiki/Functional-programming – hadley

+0

유용한 링크를 제공해 주셔서 감사합니다. – jatotterdell

답변

15

는, 함수는 함수의 인수로 제공 할 수있다. 이 구문은 함수가 아닌 객체 중 하나와 일치합니다.

다음은 예제 함수입니다.

myfun <- function(x, FUN) { 
    FUN(x) 
} 

이 함수는 객체 xFUN하는 기능을 적용한다. 10-1에서 번호를 포함하여 벡터와

몇 가지 예 :

vec <- 1:10 

> myfun(vec, mean) 
[1] 5.5 
> myfun(vec, sum) 
[1] 55 
> myfun(vec, diff) 
[1] 1 1 1 1 1 1 1 1 1 

이 내장 함수에 한정되지 않고, 어떤 기능이 작동되지 않습니다

> myfun(vec, function(obj) sum(obj)/length(obj)) 
[1] 5.5 

mymean <- function(obj){ 
    sum(obj)/length(obj) 
} 
> myfun(vec, mymean) 
[1] 5.5 
+0

전달 된 함수 "FUN"에 대한 함수 매개 변수를 어떻게 추가 하시겠습니까? – Kalle

2

당신이 할 수있는 함수 이름을 문자 변수로 저장하고 do.call()로 호출하십시오.

> test = c(1:5) 
> do.call(mean, list(test)) 
[1] 3 
> 
> func = 'mean' 
> do.call(func, list(test)) 
[1] 3