Cách giải quyết Nhận xét Đa dòng?


108

Tôi (đại loại) đã biết câu trả lời cho câu hỏi này. Nhưng tôi nhận ra rằng đó là một câu hỏi thường xuyên được hỏi trong danh sách Người dùng R, nên chắc chắn sẽ có một câu trả lời tốt. Theo hiểu biết tốt nhất của tôi, không có chức năng nhận xét nhiều dòng trong R. Vì vậy, có ai có bất kỳ cách giải quyết tốt nào không?

Mặc dù khá nhiều công việc trong R thường liên quan đến các phiên tương tác (khiến nghi ngờ về nhu cầu nhận xét nhiều dòng), nhưng đôi khi tôi đã phải gửi các tập lệnh cho đồng nghiệp và bạn học, phần lớn liên quan đến các khối mã không hề nhỏ. Và đối với những người đến từ các ngôn ngữ khác, đó là một câu hỏi khá tự nhiên.

Trong quá khứ, tôi đã sử dụng dấu ngoặc kép. Vì các chuỗi hỗ trợ dấu ngắt dòng, nên chạy tập lệnh R với

"
Here's my multiline comment.

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

hoạt động tốt. Có ai có một giải pháp tốt hơn?

Câu trả lời:


50

Điều này xuất hiện trên danh sách gửi thư khá thường xuyên, hãy xem ví dụ như chuỗi này gần đây trên r-help . Câu trả lời đồng thuận thường là câu trả lời được hiển thị ở trên: cho rằng ngôn ngữ không có hỗ trợ trực tiếp, bạn phải

  • làm việc với trình chỉnh sửa có các lệnh khu vực đến nhận xét và trình chỉnh sửa R nâng cao nhất làm
  • sử dụng các if (FALSE)cấu trúc được đề xuất trước đó nhưng lưu ý rằng nó vẫn yêu cầu phân tích cú pháp hoàn chỉnh và do đó phải chính xác về mặt cú pháp

Cảm ơn. Bạn có vui lòng mở rộng một chút về việc liệu có bất kỳ triển vọng nào cho các bình luận nhiều dòng, cho dù đó là một điều triết học, v.v.?
HamiltonUlmer

1
Tôi nghĩ đó là do bản chất của trình phân tích cú pháp, và thực tế là R cũng là một môi trường tương tác (ví dụ: dòng lệnh) chứ không phải hầu hết là một trình thông dịch dựa trên tệp, nơi các nhận xét nhiều dòng sẽ phổ biến hơn. Vì vậy, không phải triết học - nó đã phát triển theo cách này.
Dirk Eddelbuettel

Bây giờ R đã biên dịch mã, chúng ta có nghĩ rằng các bình luận nhiều dòng sẽ xuất hiện không?
Ari B. Friedman,

Không, vì trình phân tích cú pháp cơ bản không thay đổi.
Dirk Eddelbuettel

Vừa đăng một câu trả lời không yêu cầu cú pháp chính xác, mặc dù nó dành cho việc ghi lại và nhận xét kiểu chuỗi ở đây hơn là bật / tắt bật / tắt khối mã đơn giản.
Thell

70

Bạn có thể làm điều này dễ dàng trong RStudio :

chọn mã và nhấp CTR+ SHIFT+ C để nhận xét / bỏ ghi chú mã.


36

Một mẹo nhỏ cho RStudio mà tôi vừa khám phá là sử dụng #'vì điều này tạo ra một phần nhận xét tự mở rộng (khi bạn quay lại dòng mới từ một dòng như vậy hoặc chèn các dòng mới vào một phần như vậy, nó sẽ tự động nhận xét).


1
1 nhưng tôi đã nhận nó sai đầu tiên - có lẽ đây là dễ đọc hơn:#'
bluenote10

Điều này là gọn gàng! Tuyệt vời. Ai đó nên kết hợp câu trả lời này với câu trả lời do @Salvador cung cấp vì những câu trả lời này có thể được sử dụng trong các trường hợp khác nhau.
Alex Feng,

21

[Cập nhật] Dựa trên nhận xét.

# 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()

[Câu trả lời gốc]

Đây là một cách khác ... hãy xem ảnh ở dưới cùng. Cắt và dán khối mã vào RStudio.

Các nhận xét đa dòng làm cho việc sử dụng IDE hiệu quả hơn là một "Điều tốt", hầu hết các IDE hoặc trình chỉnh sửa đơn giản không có phần đánh dấu văn bản trong các khối -out nhận xét đơn giản; mặc dù một số tác giả đã dành thời gian để đảm bảo phân tích cú pháp trong chuỗi này. Với R, chúng tôi cũng không có nhận xét nhiều dòng hoặc ở đây, nhưng việc sử dụng các biểu thức vô hình trong RStudio mang lại tất cả những điều tốt đẹp đó.

Miễn là không có bất kỳ dấu nền nào trong phần muốn được sử dụng cho nhận xét nhiều dòng, chuỗi ở đây hoặc khối nhận xét không được thực thi thì đây có thể là thứ đáng giá.

#### 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!"

Và đây là bức ảnh ...

Nhận xét có cấu trúc


1
Tôi nghĩ bạn có thể xác định comment=function(z){invisible(expression(z))}điều gì có thể giúp mọi người hiểu chuyện quái quỷ gì đang xảy ra!
Spacedman

1
Có lẽ thậm chí tốt hơn , Comments<-function(`@Comments`)rm(`@Comments`). Vì bình luận đã là một chức năng hợp lệ.
Thell

1
Bạn có cần thực sự làm bất cứ điều gì với đối số không? Comments=function(x){}sẽ hoạt động ở đâu xlà một biểu thức nhiều dòng được phân tách bằng dấu ngoặc kép. Nó sẽ không cố gắng để đánh giá nó ...
Spacedman

Nguồn với echo show NULL khi niềng răng trống không chứa vô hình ()
Thell

Nhưng với Comment <- function(`@Comments`) {invisible()}, nếu bình luận quá dài, bạn sẽ gặp lỗi:variable names are limited to 10000 bytes
Nir

11

Tôi có thể nghĩ đến hai lựa chọn. Tùy chọn đầu tiên là sử dụng một trình soạn thảo cho phép chặn nhận xét và bỏ ghi chú (ví dụ: Eclipse). Tùy chọn thứ hai là sử dụng câu lệnh if. Nhưng điều đó sẽ chỉ cho phép bạn 'bình luận' đúng cú pháp R. Do đó, một trình soạn thảo tốt là giải pháp được ưa chuộng hơn cả.

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

}

9

Nếu cảm thấy thật khó tin khi bất kỳ ngôn ngữ nào không phục vụ cho điều này.

Đây có lẽ là cách giải quyết tốt nhất:

anything="
first comment line
second comment line
"

3
Hoạt động tốt trừ khi bạn muốn dấu ngoặc kép trong bình luận của bạn;)
abalter

7

Ngoài việc sử dụng cách quá mức cần thiết để nhận xét mã nhiều dòng chỉ bằng cách cài đặt RStudio, bạn có thể sử dụng Notepad ++ vì nó hỗ trợ tô sáng cú pháp của R

(Chọn nhiều dòng) -> Chỉnh sửa -> Nhận xét / Bỏ ghi chú -> Chuyển đổi Chặn Nhận xét

Lưu ý rằng trước tiên bạn cần lưu mã dưới dạng nguồn .R (được đánh dấu màu đỏ)

Lưu ý rằng trước tiên bạn cần lưu mã dưới dạng nguồn .R (được đánh dấu màu đỏ)


2

Tôi sử dụng vim để chỉnh sửa tập lệnh R.

Giả sử tập lệnh R là test.R, chứa "Dòng 1", "Dòng 2" và "Dòng 3" trên 3 dòng riêng biệt.

Tôi mở test.R trên dòng lệnh với Vim bằng cách gõ "vim test.R". Sau đó, tôi đi đến dòng đầu tiên tôi muốn nhận xét, gõ "Control-V", mũi tên xuống dòng cuối cùng tôi muốn nhận xét, nhập hoa tôi tức là "I" để chèn, nhập "#", và sau đó nhấn phím Escape để thêm "#" vào mọi dòng mà tôi đã chọn bằng cách mũi tên xuống. Lưu tệp trong Vim và sau đó thoát Vim bằng cách gõ ": wq". Các thay đổi sẽ hiển thị trong Rstudio.

Để xóa nhận xét trong Vim, hãy bắt đầu từ dòng đầu tiên trên đầu ký tự "#" mà bạn muốn xóa, một lần nữa thực hiện "Control-V" và mũi tên xuống dòng cuối cùng mà bạn muốn xóa "#". Sau đó gõ "dd". Các dấu "#" sẽ bị xóa.

Thời gian trễ có giá trị bằng giây giữa các lần thay đổi để kiểm tra. R trong Vim được phản ánh trong Rstudio.


0

Trong RStudio, một cách dễ dàng để làm điều này là viết nhận xét của bạn và khi bạn đã sử dụng CTRL + Shift + C để nhận xét dòng mã của mình, sau đó sử dụng CTRL + SHIFT + / để chỉnh sửa lại bạn nhận xét trên nhiều dòng để dễ đọc.


-2

Trong Python, bạn thực hiện một nhận xét nhiều dòng với 3 dấu ngoặc kép trước và sau các nhận xét. Tôi đã thử điều này trong R và nó dường như cũng hoạt động.

Ví dụ.

'''
This is a comment
This is a second comment
'''
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.