2012-07-25 18 views
39

आर सहायता invisible() बताती है "एक ऐसा फ़ंक्शन जो किसी ऑब्जेक्ट की अस्थायी रूप से अदृश्य प्रतिलिपि देता है"। मुझे समझने में कठिनाई है कि invisible() का उपयोग किस लिए किया जाता है। क्या आप यह समझाने में सक्षम होंगे कि invisible() क्या करता है और जब यह कार्य उपयोगी हो सकता है?फ़ंक्शन अदृश्य() क्या करता है?

मैंने देखा है कि invisible() लगभग print() के लिए विधि कार्यों में लगभग हमेशा उपयोग किया जाता है।

### My Method function: 
print.myPrint <- function(x, ...){ 
    print(unlist(x[1:2])) 
    invisible(x) 
} 

x = list(v1 = c(1:5), v2 = c(-1:-5)) 
class(x) = "myPrint" 
print(x) 

मैं सोच रहा था कि invisible(x) बिना, मैं की तरह काम करने के लिए सक्षम नहीं होगा:: यहाँ एक उदाहरण है

a = print(x) 

लेकिन यह वास्तव में ऐसा नहीं है। तो, मैं जानना चाहता हूं कि invisible() क्या करता है, जहां यह उपयोगी हो सकता है, और आखिर में विधि प्रिंट फ़ंक्शन में इसकी भूमिका क्या है?

आपकी मदद के लिए बहुत बहुत धन्यवाद।

+13

मैं आपको एक उत्तर दे सकता हूं लेकिन मैं इसे आपको नहीं दिखा सकता। – mdsumner

उत्तर

23
?invisible से

:

विवरण:

This function can be useful when it is desired to have functions 
return values which can be assigned, but which do not print when 
they are not assigned. 

तो तुम परिणाम प्रदान कर सकते हैं, लेकिन अगर नहीं सौंपा यह मुद्रित नहीं किया जाएगा। यह अक्सर return के स्थान पर उपयोग किया जाता है। आपकी print.myPrint विधि केवल प्रिंट करती है क्योंकि आप स्पष्ट रूप से print पर कॉल करते हैं। आपके फ़ंक्शन के अंत में invisible(x) पर कॉल केवल x की प्रतिलिपि देता है।

यदि आपने invisible का उपयोग नहीं किया है, तो x भी असाइन नहीं किए जाने पर मुद्रित किया जाएगा। invisible() अपनी सामग्री अस्थायी अदृश्य बनाता है और अक्सर return() के बजाय प्रयोग किया जाता है यह बजाय उसके स्थानापन्न के रूप में return() के साथ संयोजन में इस्तेमाल किया जाना चाहिए और न

R> print.myPrint <- function(x, ...){ 
+ print(unlist(x[1:2])) 
+ return(x) 
+ } 
R> print(x) 
v11 v12 v13 v14 v15 v21 v22 v23 v24 v25 
    1 2 3 4 5 -1 -2 -3 -4 -5 
v11 v12 v13 v14 v15 v21 v22 v23 v24 v25 
    1 2 3 4 5 -1 -2 -3 -4 -5 
7

जबकि उदाहरण के लिए:।

जबकि return() फ़ंक्शन निष्पादन को रोक देगा और उसमें डाल दिया गया मान वापस कर देगा, invisible() ऐसी कोई चीज़ नहीं करेगा। यह केवल थोड़ी देर के लिए अपनी सामग्री अदृश्य बनाता है।

f1 <- function(x){ 
    if(x > 0){ 
    invisible("bigger than 0") 
    }else{ 
    return("negative number") 
    } 
    "something went wrong" 
} 

result <- f1(1) 

result 
## [1] "something went wrong" 



f2 <- function(x){ 
    if(x > 0){ 
    return(invisible("bigger than 0")) 
    }else{ 
    return("negative number") 
    } 
} 

result <- f2(1) 

result 
## [1] "bigger than 0" 

उन्हें धोखा दिया करने के बाद invisible() के ख़तरा हम अपने काम करने पर एक नजर है कर सकते हैं::

निम्नलिखित दो उदाहरणों को देखें

f2(1) 

समारोह की वजह से इसकी वापसी मान प्रिंट नहीं करता invisible() के उपयोग के लिए। हालांकि यह सामान्य के रूप में मूल्य को पारित करता है:

res <- f2(1) 
res 
## [1] "bigger than 0" 

invisible() के उपयोग के मामलों जैसे हैं फ़ंक्शन रिटर्न वैल्यू को रोकने के लिए जो आउटपुट के पेज के बाद पेज का उत्पादन करेगा या जब उसके साइड इफेक्ट के लिए फ़ंक्शन कहा जाता है और वापसी मान उदा।केवल आगे की जानकारी देने के लिए उपयोग किया जाता है ...

+1

अन्य प्रोग्रामिंग भाषाओं से आ रहा है, यह समझने के बाद यह अधिक समझ में आता है कि आर बहुत सारी चीज़ें प्रिंट करता है। मैं इस तरह के प्रिंटिंग को साइड इफेक्ट पर विचार करता हूं और अदृश्य() इसे ऐसा नहीं करता है। – Chris

संबंधित मुद्दे