बहुभाषी टिप्पणी Workarounds?


108

मैं (इस प्रकार) पहले से ही इस प्रश्न का उत्तर जानता हूं। लेकिन मुझे लगा कि यह एक ऐसा है जो आर उपयोगकर्ताओं की सूची में इतनी बार पूछा जाता है, कि एक ठोस अच्छा उत्तर होना चाहिए। मेरे ज्ञान का सबसे अच्छा करने के लिए आर। में कोई बहुस्तरीय टिप्पणी कार्यशीलता नहीं है।

जबकि R में काफी काम आम तौर पर इंटरेक्टिव सेशन (जिसमें मल्टीलाइन कमेंट्स की जरूरत पर संदेह होता है) को शामिल किया जाता है, ऐसे समय होते हैं जब मुझे सहकर्मियों और सहपाठियों को स्क्रिप्ट भेजनी होती है, जिनमें से अधिकांश में कोड के नैटिवियल ब्लॉक शामिल होते हैं। और अन्य भाषाओं से आने वाले लोगों के लिए यह काफी स्वाभाविक प्रश्न है।

अतीत में मैंने उद्धरणों का उपयोग किया है। चूंकि स्ट्रिंग्स लाइनब्रेक का समर्थन करते हैं, एक आर स्क्रिप्ट के साथ चल रहे हैं

"
Here's my multiline comment.

"
a <- 10
rocknroll.lm <- lm(blah blah blah)
 ...

ठीक काम करता है। क्या किसी के पास बेहतर उपाय है?

जवाबों:


50

यह मेलिंग सूची पर काफी नियमित रूप से आता है, उदाहरण के लिए इस हाल के धागे को आर-हेल्प पर देखें । आम तौर पर आम सहमति का उत्तर ऊपर दिखाया गया है: यह देखते हुए कि भाषा का कोई प्रत्यक्ष समर्थन नहीं है, आपको या तो है

  • एक संपादक के साथ कार्य करें जिसमें क्षेत्र-से-टिप्पणी आदेश हैं, और सबसे उन्नत आर संपादक करते हैं
  • if (FALSE)पहले बताए गए निर्माणों का उपयोग करें, लेकिन ध्यान दें कि इसके लिए अभी भी पूर्ण पार्सिंग की आवश्यकता है और इसलिए इसे वाक्यविन्यास रूप से सही होना चाहिए

धन्यवाद। क्या आप इस बात पर थोड़ा विस्तार करेंगे कि क्या बहुस्तरीय टिप्पणियों के लिए कोई संभावनाएं हैं या नहीं, क्या यह एक दार्शनिक बात है, आदि?
हैमिल्टनउल्मेर 21

1
मुझे लगता है कि यह पार्सर की प्रकृति के कारण है, और तथ्य यह है कि आर भी एक इंटरएक्टिव वातावरण (यानी: कमांड-लाइन) है बजाय ज्यादातर फ़ाइल-आधारित दुभाषिया जहां मल्टी-लाइन टिप्पणियां अधिक सामान्य होंगी। तो दार्शनिक नहीं - यह इस तरह से बढ़ा है।
डिर्क एडल्डबुलेटेल

अब जब आर ने कोड संकलित कर लिया है, तो क्या हमें लगता है कि मल्टी-लाइन टिप्पणियां एक उपस्थिति बनाने जा रही हैं?
अरी बी। फ्रीडमैन

नहीं, जैसा कि अंतर्निहित पार्सर नहीं बदला है।
डिर्क एडल्डबुलेटेल

बस एक जवाब पोस्ट किया गया है जिसमें सही सिंटैक्स की आवश्यकता नहीं है, हालांकि यह यहाँ के लिए अधिक है-स्ट्रिंग प्रकार के दस्तावेज़ और सरल कोड-ब्लॉक सक्षम / निष्क्रिय टॉगल की तुलना में टिप्पणी करना।
टोल


36

RStudio के लिए एक साफ-सुथरी चाल जो मैंने अभी-अभी खोजी है, वह #'यह है कि यह एक सेल्फ- एक्सपेंशन कमेंट सेक्शन बनाता है (जब आप इस तरह की लाइन से नई लाइन में लौटते हैं या इस तरह के सेक्शन में नई लाइनें डालते हैं तो यह अपने आप कमेंट हो जाता है)।


1
+1 लेकिन मुझे यह पहले गलत लगा - शायद यह अधिक पठनीय है:#'
bluenote10

यह साफ है! महान एक। किसी को इस उत्तर को @Salvador द्वारा प्रदान किए गए के साथ जोड़ना चाहिए क्योंकि इनका उपयोग विभिन्न मामलों में किया जा सकता है।
एलेक्स फेंग

21

[अद्यतन] टिप्पणियों के आधार पर।

# An empty function for Comments
Comment <- function(`@Comments`) {invisible()}

#### Comments ####
Comment( `

  # Put anything in here except back-ticks.

  api_idea <- function() {
    return TRUE
  }

  # Just to show api_idea isn't really there...
  print( api_idea )

`)
####

#### Code. ####
foo <- function() {
  print( "The above did not evaluate!")
}
foo()

[मूल उत्तर]

यहाँ एक और तरीका है ... तल पर तस्वीर देखें। कोड ब्लॉक को RStudio में काटें और चिपकाएँ।

बहु-भाषी टिप्पणियां जो एक IDE का अधिक प्रभावी उपयोग करती हैं, वे एक "अच्छी बात" हैं, अधिकांश IDE या सरल संपादकों के पास सरल टिप्पणी वाले ब्लॉक के भीतर पाठ का हाइलाइटिंग नहीं है; हालांकि कुछ लेखकों ने समय निकालकर यहाँ के तार को सुनिश्चित किया है। R के साथ हमारे पास मल्टी-लाइन टिप्पणियां या यहां-स्ट्रिंग नहीं हैं, लेकिन RStudio में अदृश्य अभिव्यक्तियों का उपयोग करने से वह सब अच्छा हो जाता है।

जब तक बहुभाषी टिप्पणियों के लिए उपयोग किए जाने वाले अनुभाग में कोई बैकटिक्स नहीं है, तब तक यहां-स्ट्रिंग्स, या गैर-निष्पादित टिप्पणी ब्लॉक हैं तब यह कुछ सार्थक हो सकता है।

#### Intro Notes & Comments ####
invisible( expression( `
{ <= put the brace here to reset the auto indenting...

  Base <- function()
  {      <^~~~~~~~~~~~~~~~ Use the function as a header and nesting marker for the comments
         that show up in the jump-menu.
         --->8---
  }

  External <- function()
  {
    If we used a function similar to:
      api_idea <- function() {

        some_api_example <- function( nested ) {
          stopifnot( some required check here )
        }

        print("Cut and paste this into RStudio to see the code-chunk quick-jump structure.")
        return converted object
      }

    #### Code. ####
    ^~~~~~~~~~~~~~~~~~~~~~~~~~ <= Notice that this comment section isnt in the jump menu!
                                  Putting an apostrophe in isn't causes RStudio to parse as text
                                  and needs to be matched prior to nested structure working again.
    api_idea2 <- function() {

    } # That isn't in the jump-menu, but the one below is...

    api_idea3 <- function() {

    }

  }

    # Just to show api_idea isn't really there...
    print( api_idea )
    }`) )
####

#### Code. ####
foo <- function() {
  print( "The above did not evaluate and cause an error!")
}

foo()

## [1] "The above did not evaluate and cause an error!"

और यहाँ की तस्वीर है ...

संरचित टिप्पणियाँ


1
मुझे लगता है कि आप परिभाषित कर सकते हैं comment=function(z){invisible(expression(z))}जो लोगों को यह समझने में मदद कर सकता है कि बिल्ली क्या चल रही है!
स्पेन्डमैन

1
शायद इससे भी बेहतर Comments<-function(`@Comments`)rm(`@Comments`),। चूंकि टिप्पणी पहले से ही एक मान्य फ़ंक्शन है।
Thell

1
क्या आपको वास्तव में arg के साथ कुछ भी करने की आवश्यकता है? Comments=function(x){}जहां xबैकलाइन द्वारा सीमांकित एक बहुस्तरीय अभिव्यक्ति के लिए काम करेगा । यह इसका मूल्यांकन करने की कोशिश नहीं करेगा ...
Spacedman

जब खाली ब्रेसिज़ अदृश्य नहीं होता है तो गूंज के साथ स्रोत दिखाता है ()
19:25

लेकिन Comment <- function(`@Comments`) {invisible()}, अगर टिप्पणी बहुत लंबी है, तो आपको एक त्रुटि मिलती है:variable names are limited to 10000 bytes
Nir

11

मैं दो विकल्पों के बारे में सोच सकता हूं। पहला विकल्प एक संपादक का उपयोग करना है जो टिप्पणी और असहजता को ब्लॉक करने की अनुमति देता है (जैसे। ग्रहण)। दूसरा विकल्प एक if स्टेटमेंट का उपयोग करना है। लेकिन यह आपको केवल सही आर सिंटैक्स 'टिप्पणी' करने की अनुमति देगा। इसलिए एक अच्छा संपादक पसंद किया गया वर्कअराउंड है।

if(FALSE){
     #everything in this case is not executed

}

9

अगर यह अविश्वसनीय लगता है कि कोई भी भाषा इसके लिए पूरा नहीं करेगी।

यह शायद सबसे साफ सुथरा हल है:

anything="
first comment line
second comment line
"

3
ठीक काम करता है जब तक आप अपनी टिप्पणी में उद्धरण नहीं चाहते हैं;)
21

7

केवल RStudio को स्थापित करके मल्टी-लाइन कोड पर टिप्पणी करने के लिए ओवरकिल्ड तरीके का उपयोग करने के अलावा, आप नोटपैड ++ का उपयोग कर सकते हैं क्योंकि यह आर के सिंटैक्स हाइलाइटिंग का समर्थन करता है।

(मल्टी-लाइनों का चयन करें) -> संपादित करें -> टिप्पणी / Uncomment -> टॉगल ब्लॉक टिप्पणी

ध्यान दें कि आपको पहले .R स्रोत के रूप में कोड को सहेजना होगा (लाल रंग में हाइलाइट किया गया)

ध्यान दें कि आपको पहले .R स्रोत के रूप में कोड को सहेजना होगा (लाल रंग में हाइलाइट किया गया)


2

मैं आर स्क्रिप्ट को संपादित करने के लिए विम का उपयोग करता हूं।

मान लीजिए कि आर स्क्रिप्ट परीक्षण है। 3 अलग-अलग लाइनों पर "लाइन 1", "लाइन 2" और "लाइन 3" कहें।

मैं "vim test.R" लिखकर विम के साथ कमांड लाइन पर test.R खोलता हूं। फिर मैं उस पहली पंक्ति पर जाता हूं जिसे मैं टिप्पणी करना चाहता हूं, "Control-V" टाइप करें, अंतिम पंक्ति के नीचे तीर मैं टिप्पणी करना चाहता हूं, एक पूंजी I टाइप करें "I" सम्मिलित करने के लिए, "#" टाइप करें, और फिर हर पंक्ति में "#" जोड़ने के लिए एस्केप कुंजी दबाएं जिसे मैंने नीचे तीर मारकर चुना था। फ़ाइल को विम में सहेजें और फिर ": wq" टाइप करके विम से बाहर निकलें। Rstudio में परिवर्तन दिखाना चाहिए।

विम में टिप्पणियों को हटाने के लिए, चरित्र के शीर्ष पर पहली पंक्ति पर शुरू करें "#" जिसे आप हटाना चाहते हैं, फिर से "नियंत्रण-वी" करें, और अंतिम पंक्ति को नीचे तीर से हटाएं जिसे आप "#" से हटाना चाहते हैं। फिर "dd" टाइप करें। "#" संकेत हटाए जाने चाहिए।

परीक्षण में परिवर्तन के बीच लैग समय का सेकंड-मूल्य है। विम विम Rstudio में परिलक्षित होता है।


0

में RStudio एक आसान तरीका यह करने के लिए अपनी टिप्पणी लिखने के लिए है और एक बार आप Ctrl + Shift + सी का इस्तेमाल किया है कोड के अपने लाइन टिप्पणी करने के लिए, फिर CTRL + SHIFT + / का उपयोग आप पढ़ने में आसानी के लिए कई पंक्तियों पर टिप्पणी पुन: प्रवाहित होकर।


-2

पायथन में आप टिप्पणियों के पहले और बाद में 3x एकल उद्धरणों के साथ एक बहुस्तरीय टिप्पणी करते हैं। मैंने आर में यह कोशिश की और यह भी काम करने लगता है।

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

'''
This is a comment
This is a second comment
'''
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.