खोज…


नामित कार्य

आर कार्यों से भरा है, यह सभी कार्यात्मक प्रोग्रामिंग भाषा के बाद है , लेकिन कभी-कभी सटीक फ़ंक्शन जो आपको चाहिए वह आधार संसाधनों में प्रदान नहीं किया जाता है। आप गर्भ धारण कर सकते हैं एक फंक्शन युक्त पैकेज स्थापित कर सकते हैं, लेकिन हो सकता है कि आपकी आवश्यकताएं केवल इतनी विशिष्ट हों कि कोई पूर्व-निर्मित फ़ंक्शन बिल में फिट न हो? फिर आपको अपना बनाने का विकल्प छोड़ दिया जाता है।

एक फ़ंक्शन बहुत सरल हो सकता है, बहुत अधिक व्यर्थ होने के बिंदु तक। यह भी एक तर्क लेने की जरूरत नहीं है:

one <- function() { 1 }
one()
[1] 1

two <- function() { 1 + 1 }
two()
[1] 2

घुंघराले ब्रेसिज़ { } के बीच क्या कार्य उचित है। जब तक आप एक ही लाइन पर सब कुछ फिट कर सकते हैं, जिनकी उन्हें सख्त आवश्यकता नहीं है, लेकिन चीजों को व्यवस्थित रखने के लिए उपयोगी हो सकता है।

एक फ़ंक्शन बहुत सरल हो सकता है, फिर भी अत्यधिक विशिष्ट हो सकता है। यह फ़ंक्शन एक वेक्टर के रूप में लेता है (इस उदाहरण में vec ) और वेक्टर की लंबाई (इस मामले में 6) के साथ एक ही वेक्टर को वेक्टर के प्रत्येक तत्वों से घटाता है।

vec <- 4:9
subtract.length <- function(x) { x - length(x) }
subtract.length(vec)
[1] -2 -1  0  1  2  3

ध्यान दें कि length() अपने आप में एक पूर्व-आपूर्ति (यानी बेस ) फ़ंक्शन है। आप निश्चित रूप से एक अन्य स्व-निर्मित फ़ंक्शन के भीतर पहले से बनाए गए फ़ंक्शन का उपयोग कर सकते हैं, साथ ही साथ चर को असाइन कर सकते हैं और कई लाइनों का विस्तार करते हुए अन्य ऑपरेशन कर सकते हैं:

vec2 <- (4:7)/2

msdf <- function(x, multiplier=4) {
    mult <- x * multiplier
    subl <- subtract.length(x)
    data.frame(mult, subl)
}

msdf(vec2, 5)
  mult subl
1 10.0 -2.0
2 12.5 -1.5
3 15.0 -1.0
4 17.5 -0.5

multiplier=4 यह सुनिश्चित करता है कि 4 तर्क multiplier का डिफ़ॉल्ट मान है, यदि फ़ंक्शन 4 को कॉल करते समय कोई मूल्य नहीं दिया जाता है तो इसका उपयोग क्या किया जाएगा।

उपरोक्त सभी नामित कार्यों के उदाहरण हैं, इसलिए केवल इसलिए कहा जाता है क्योंकि उन्हें नाम दिए गए हैं ( one , two , subtract.length )

अनाम कार्य

एक अनाम फ़ंक्शन है, जैसा कि नाम का अर्थ है, नाम निर्दिष्ट नहीं किया गया है। यह तब उपयोगी हो सकता है जब फ़ंक्शन एक बड़े ऑपरेशन का एक हिस्सा है, लेकिन अपने आप में ज्यादा जगह नहीं लेता है। अनाम फ़ंक्शंस के लिए एक लगातार उपयोग-मामला बेस फ़ंक्शंस के *apply परिवार के भीतर है।

data.frame में प्रत्येक स्तंभ के लिए रूट माध्य वर्ग की गणना करें:

df <- data.frame(first=5:9, second=(0:4)^2, third=-1:3)

apply(df, 2, function(x) { sqrt(sum(x^2)) })
    first    second     third 
15.968719 18.814888  3.872983 

मैट्रिक्स में प्रत्येक पंक्ति के लिए सबसे छोटे से सबसे बड़े मान से चरण-लंबाई का एक क्रम बनाएं।

x <- sample(1:6, 12, replace=TRUE)
mat <- matrix(x, nrow=3)

apply(mat, 1, function(x) { seq(min(x), max(x)) })

एक अनाम फ़ंक्शन भी अपने दम पर खड़ा हो सकता है:

(function() { 1 })()
[1] 1

के बराबर है

f <- function() { 1 })
f()
[1] 1

RStudio कोड स्निपेट्स

यह उन लोगों के लिए सिर्फ एक छोटी सी हैक है जो अक्सर स्व-परिभाषित कार्यों का उपयोग करते हैं।
"मजेदार" RStudio IDE टाइप करें और TAB को हिट करें।

यहाँ छवि विवरण दर्ज करें

परिणाम एक नए समारोह का कंकाल होगा।

name <- function(variables) {
        
}

एक आसानी से अपने स्वयं के स्निपेट टेम्पलेट को परिभाषित कर सकता है, अर्थात नीचे जैसा

name <- function(df, x, y) {
        require(tidyverse)
        out <- 
        return(out)
}

विकल्प Global Options -> Code मेनू में Edit Snippets को Edit Snippets

एक फ़ंक्शन के तर्क के रूप में कॉलम नाम पास करना

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

basic.stats <- function(dset, vars){
    for(i in 1:length(vars)){
        print(vars[i])
        print(summary(dset[[vars[i]]]))
    }
}

basic.stats(iris, c("Sepal.Length", "Petal.Width"))

दिए गए कोड के ऊपर चलने के परिणामस्वरूप, चयनित कंसोल और उनके मूल सारांश आंकड़े (मिनीमा, प्रथम क्वांटाइल्स, मेडियन, साधन, तृतीय क्वांटाइल्स और मैक्सिमा) के नाम आर कंसोल में मुद्रित होते हैं। कोड dset[[vars[i]]] चयन i-वें तत्व से तर्क vars और चयन की घोषणा की इनपुट डेटा सेट में एक इसी स्तंभ dset । उदाहरण के लिए, iris[["Sepal.Length"]] घोषणा iris[["Sepal.Length"]] अकेले एक सदिश के रूप में स्थापित iris डेटा से Sepal.Length कॉलम मुद्रित करेगा।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow