วิธีแก้ปัญหาความคิดเห็นหลายบรรทัด?


108

ฉัน (เรียงลำดับ) รู้คำตอบสำหรับคำถามนี้แล้ว แต่ฉันคิดว่ามันเป็นสิ่งที่ถูกถามบ่อยมากในรายการผู้ใช้ R ซึ่งควรมีคำตอบที่ดีที่มั่นคง จากความรู้ที่ดีที่สุดของฉันไม่มีฟังก์ชันการแสดงความคิดเห็นแบบหลายบรรทัดใน R ดังนั้นใครมีวิธีแก้ปัญหาที่ดีหรือไม่?

แม้ว่างานใน R มักจะเกี่ยวข้องกับเซสชันแบบโต้ตอบ (ซึ่งทำให้เกิดข้อสงสัยเกี่ยวกับความจำเป็นในการแสดงความคิดเห็นหลายบรรทัด) แต่ก็มีบางครั้งที่ฉันต้องส่งสคริปต์ไปยังเพื่อนร่วมงานและเพื่อนร่วมชั้นซึ่งส่วนใหญ่เกี่ยวข้องกับบล็อกโค้ดที่ไม่สำคัญ และสำหรับคนที่มาจากภาษาอื่นมันเป็นคำถามที่ค่อนข้างเป็นธรรมชาติ

ในอดีตฉันเคยใช้คำพูด เนื่องจากสตริงรองรับการแบ่งบรรทัดการรันสคริปต์ R ด้วย

"
Here's my multiline comment.

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

ใช้งานได้ดี ใครมีวิธีแก้ไขที่ดีกว่านี้ไหม

คำตอบ:


50

นี้ไม่เกิดขึ้นในรายการทางธรรมอย่างสม่ำเสมอเห็นเช่นนี้กระทู้เมื่อเร็ว ๆ นี้ R-ช่วยเหลือ คำตอบที่เป็นเอกฉันท์มักจะเป็นคำตอบที่แสดงไว้ด้านบนนั่นคือเนื่องจากภาษาไม่มีการสนับสนุนโดยตรงคุณต้องทำอย่างใดอย่างหนึ่ง

  • ทำงานกับตัวแก้ไขที่มีคำสั่ง region-to-comment และตัวแก้ไข R ขั้นสูงที่สุดทำ
  • ใช้if (FALSE)โครงสร้างที่แนะนำก่อนหน้านี้ แต่โปรดทราบว่ายังต้องมีการแยกวิเคราะห์ที่สมบูรณ์และด้วยเหตุนี้จึงต้องถูกต้องตามหลักไวยากรณ์

ขอบคุณ. คุณช่วยขยายความเล็กน้อยว่ามีโอกาสแสดงความคิดเห็นหลายบรรทัดหรือไม่ไม่ว่าจะเป็นเรื่องเชิงปรัชญา ฯลฯ
HamiltonUlmer

1
ฉันคิดว่ามันเป็นเพราะลักษณะของตัวแยกวิเคราะห์และความจริงที่ว่า R ยังเป็นสภาพแวดล้อมแบบโต้ตอบ (เช่น: บรรทัดคำสั่ง) แทนที่จะเป็นล่ามตามไฟล์เป็นส่วนใหญ่ซึ่งการแสดงความคิดเห็นแบบหลายบรรทัดจะเป็นเรื่องธรรมดามากกว่า ไม่ใช่เชิงปรัชญา - มันเติบโตขึ้นด้วยวิธีนี้
Dirk Eddelbuettel

ตอนนี้ R ได้รวบรวมโค้ดแล้วเราคิดว่าความคิดเห็นแบบหลายบรรทัดกำลังจะปรากฏขึ้นหรือไม่
Ari B. Friedman

ไม่เนื่องจากตัวแยกวิเคราะห์ที่อยู่ภายใต้ไม่มีการเปลี่ยนแปลง
Dirk Eddelbuettel

เพิ่งโพสต์คำตอบที่ไม่ต้องการไวยากรณ์ที่ถูกต้องแม้ว่ามันจะมีมากกว่าสำหรับการจัดทำเอกสารและการแสดงความคิดเห็นประเภทสตริงที่นี่มากกว่าการสลับเปิด / ปิดการใช้งานรหัสบล็อกธรรมดา
thell


36

เคล็ดลับที่เป็นระเบียบสำหรับ RStudio ที่ฉันเพิ่งค้นพบคือการใช้เพื่อ#'สร้างส่วนความคิดเห็นที่ขยายตัวเอง (เมื่อคุณกลับไปที่บรรทัดใหม่จากบรรทัดดังกล่าวหรือแทรกบรรทัดใหม่ลงในส่วนดังกล่าวระบบจะแสดงความคิดเห็นโดยอัตโนมัติ)


1
+1 แต่ฉันเข้าใจผิดก่อน - อาจจะอ่านได้มากกว่านี้:#'
bluenote10

นี่มัน! เยี่ยมมาก ใครบางคนควรรวมคำตอบนี้เข้ากับคำตอบที่ @Salvador ให้ไว้เนื่องจากสามารถใช้คำตอบเหล่านี้ได้ในหลายกรณี
Alex Feng

21

[Update] อ้างอิงจากความคิดเห็น

# 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 ให้ความดีทั้งหมดนั้น

ตราบเท่าที่ไม่มี backticks ใด ๆ ในส่วนที่ต้องการใช้สำหรับความคิดเห็นหลายบรรทัดสตริงที่นี่หรือบล็อกความคิดเห็นที่ไม่ได้ดำเนินการนี่อาจเป็นสิ่งที่คุ้มค่าในขณะนี้

#### 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))}สิ่งที่อาจช่วยให้ผู้คนเข้าใจว่าเกิดอะไรขึ้น!
Spacedman

1
บางทีอาจจะดีกว่านี้Comments<-function(`@Comments`)rm(`@Comments`)ก็ได้ เนื่องจากความคิดเห็นเป็นฟังก์ชันที่ถูกต้องอยู่แล้ว
thell

1
คุณจำเป็นต้องทำอะไรกับอาร์กิวเมนต์หรือไม่? Comments=function(x){}จะทำงานโดยที่xนิพจน์หลายบรรทัดคั่นด้วย backquote จะไม่พยายามประเมินมัน ...
Spacedman

แหล่งที่มาพร้อมเสียงสะท้อนจะแสดงค่า NULL เมื่อวงเล็บปีกกาว่างเปล่าไม่มีสิ่งที่มองไม่เห็น ()
Thell

แต่Comment <- function(`@Comments`) {invisible()}ถ้าความคิดเห็นยาวเกินไปคุณจะได้รับข้อผิดพลาด:variable names are limited to 10000 bytes
Nir

11

ฉันคิดได้สองทางเลือก ตัวเลือกแรกคือการใช้ตัวแก้ไขที่อนุญาตให้บล็อกข้อคิดเห็นและการไม่แสดงความคิดเห็น (เช่น Eclipse) ตัวเลือกที่สองคือการใช้คำสั่ง if แต่นั่นจะช่วยให้คุณสามารถ 'แสดงความคิดเห็น' ที่ถูกต้องไวยากรณ์ R เท่านั้น ดังนั้นตัวแก้ไขที่ดีจึงเป็นวิธีแก้ปัญหาที่ต้องการ

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

}

9

หากพบว่าไม่น่าเชื่อว่าภาษาใด ๆ ก็ไม่รองรับสิ่งนี้

นี่อาจเป็นวิธีแก้ปัญหาที่ชัดเจนที่สุด:

anything="
first comment line
second comment line
"

3
ใช้งานได้ดีเว้นแต่คุณต้องการคำพูดในความคิดเห็นของคุณ)
abalter

7

นอกเหนือจากการใช้วิธีที่มากเกินไปในการแสดงความคิดเห็นโค้ดหลายบรรทัดเพียงแค่ติดตั้ง RStudio คุณยังสามารถใช้Notepad ++ ได้เนื่องจากรองรับการเน้นไวยากรณ์ของ R

(เลือกหลายบรรทัด) -> แก้ไข -> ความคิดเห็น / ไม่แสดงความคิดเห็น -> สลับบล็อกความคิดเห็น

โปรดทราบว่าคุณต้องบันทึกรหัสเป็นแหล่ง. R ก่อน (เน้นด้วยสีแดง)

โปรดทราบว่าคุณต้องบันทึกรหัสเป็นแหล่ง. R ก่อน (เน้นด้วยสีแดง)


2

ฉันใช้กลุ่มเพื่อแก้ไขสคริปต์ R

สมมติว่าสคริปต์ R คือ test.R ซึ่งมีคำว่า "Line 1", "Line 2" และ "Line 3" ใน 3 บรรทัดแยกกัน

ฉันเปิด test.R บนบรรทัดคำสั่งด้วย Vim โดยพิมพ์ "vim test.R" จากนั้นไปที่บรรทัดที่ 1 ที่ต้องการแสดงความคิดเห็นพิมพ์ "Control-V" ลูกศรลงไปที่บรรทัดสุดท้ายที่ต้องการแสดงความคิดเห็นพิมพ์ตัวพิมพ์ใหญ่คือ "I" สำหรับแทรกพิมพ์ "#" จากนั้น กดปุ่ม Escape เพื่อเพิ่ม "#" ในทุกบรรทัดที่ฉันเลือกโดยลูกศรลง บันทึกไฟล์ใน Vim จากนั้นออกจาก Vim โดยพิมพ์ ": wq" การเปลี่ยนแปลงควรปรากฏใน Rstudio

หากต้องการลบความคิดเห็นในกลุ่มเริ่มต้นที่บรรทัดแรกที่ด้านบนของอักขระ "#" ที่คุณต้องการลบแล้วทำ "Control-V" อีกครั้งแล้วลูกศรลงไปที่บรรทัดสุดท้ายที่คุณต้องการลบ "#" ออก จากนั้นพิมพ์ "dd" ควรลบเครื่องหมาย "#"

มีเวลาหน่วงเป็นวินาทีระหว่างเวลาที่เปลี่ยนแปลงในการทดสอบ R ใน Vim จะแสดงใน Rstudio


0

ในRStudioวิธีง่ายๆในการทำเช่นนี้คือการเขียนความคิดเห็นของคุณและเมื่อคุณใช้ CTRL + Shift + C เพื่อแสดงความคิดเห็นบรรทัดโค้ดของคุณแล้วให้ใช้ CTRL + SHIFT + / เพื่อแสดงความคิดเห็นซ้ำเป็นหลายบรรทัดเพื่อความสะดวกในการอ่าน


-2

ใน Python คุณแสดงความคิดเห็นหลายบรรทัดโดยมีเครื่องหมายคำพูดเดี่ยว 3x ก่อนและหลังความคิดเห็น ฉันลองสิ่งนี้ใน R และดูเหมือนว่าจะได้ผลเช่นกัน

เช่น.

'''
This is a comment
This is a second comment
'''
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.