2013-03-22 6 views
9

मैं आर में द्विपदीय अनुपात के अंतराल अनुमान के लिए कवरेज संभावनाओं की गणना करने के लिए एक सामान्य कार्य लिखने का प्रयास कर रहा हूं। मैं विभिन्न आत्मविश्वास अंतराल विधियों के लिए ऐसा करने का इरादा रखता हूं उदा। वाल्ड, क्लॉपर-पियरसन, अलग-अलग priors के लिए एचपीडी अंतराल।आर फंक्शन में तर्क के रूप में फ़ंक्शन पैरामीटर

आदर्श रूप से, मैं एक समारोह होना चाहता हूं, जो एक तर्क के रूप में ले सकता है, जिस विधि को अंतराल की गणना करने के लिए उपयोग किया जाना चाहिए। मेरा प्रश्न तब: मैं किसी फ़ंक्शन को किसी अन्य फ़ंक्शन में तर्क के रूप में कैसे शामिल कर सकता हूं?

उदाहरण के लिए, सटीक 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) 
} 

कहाँ सटीक (एक्स, एन) सिर्फ एक उचित अंतराल गणना करने के लिए कार्य है। मैं

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

के लिए इतना है कि मैं अंतराल गणना की प्रत्येक विधि के लिए एक अलग कवरेज समारोह कवरेज संभावनाओं के बजाय गणना करने के लिए एक समारोह है चाहते हैं। क्या ऐसा करने का कोई मानक तरीका है? मैं एक स्पष्टीकरण नहीं मिला है।

धन्यवाद, जेम्स

+1

पर कॉल करें, आप https://github.com/hadle को पढ़ना चाहेंगे y/devtools/wiki/कार्यात्मक-प्रोग्रामिंग – hadley

+0

उपयोगी लिंक के लिए धन्यवाद। – jatotterdell

उत्तर

15

आर में, एक समारोह में एक समारोह तर्क के रूप में प्रदान की जा सकती। वाक्यविन्यास गैर-फ़ंक्शन ऑब्जेक्ट्स में से एक से मेल खाता है।

यहां एक उदाहरण समारोह है।

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

इस समारोह वस्तु x को समारोह FUN लागू होता है।

1 से नंबर सहित एक वेक्टर 10 के साथ कुछ उदाहरण:

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 
संबंधित मुद्दे