Solusi Komentar Multiline?

108

Saya (semacam) sudah tahu jawaban untuk pertanyaan ini. Tapi saya pikir itu adalah salah satu yang sering ditanyakan di daftar Pengguna R, sehingga harus ada satu jawaban bagus yang solid. Sepengetahuan saya tidak ada fungsi komentar multiline di R. Jadi, apakah ada yang punya solusi yang bagus?

Meskipun cukup banyak pekerjaan di R biasanya melibatkan sesi interaktif (yang menimbulkan keraguan tentang perlunya komentar multiline), ada kalanya saya harus mengirim skrip ke kolega dan teman sekelas, yang sebagian besar melibatkan blok kode nontrivial. Dan bagi orang yang berasal dari bahasa lain, ini adalah pertanyaan yang wajar.

Di masa lalu saya telah menggunakan tanda kutip. Karena string mendukung pemutusan baris, menjalankan skrip R dengan

"
Here's my multiline comment.

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

bekerja dengan baik. Apakah ada yang punya solusi yang lebih baik?

HamiltonUlmer
sumber

Jawaban:

50

Ini muncul di milis cukup teratur, lihat misalnya utas terbaru ini di r-help . Jawaban konsensus biasanya adalah yang ditunjukkan di atas: bahwa karena bahasa tersebut tidak memiliki dukungan langsung, Anda harus melakukannya juga

  • bekerja dengan editor yang memiliki perintah wilayah-ke-komentar, dan editor R paling canggih melakukannya
  • gunakan if (FALSE)konstruksi yang disarankan sebelumnya tetapi perhatikan bahwa itu masih memerlukan penguraian lengkap dan karenanya harus benar secara sintaksis
Dirk Eddelbuettel
sumber
Terima kasih. Maukah Anda menjelaskan sedikit tentang apakah ada prospek untuk komentar multiline atau tidak, apakah itu hal filosofis, dll.?
HamiltonUlmer
1
Saya pikir itu karena sifat parser, dan fakta bahwa R juga merupakan lingkungan interaktif (yaitu: baris perintah) daripada kebanyakan juru bahasa berbasis file di mana komentar multi-baris akan lebih umum. Jadi tidak filosofis - ia tumbuh seperti ini.
Dirk Eddelbuettel
Sekarang R telah mengkompilasi kode, apakah menurut kami komentar multi-baris akan muncul?
Ari B. Friedman
Tidak, karena parser yang mendasari tidak berubah.
Dirk Eddelbuettel
Baru saja memposting jawaban yang tidak memerlukan sintaks yang benar, meskipun itu lebih untuk pendokumentasian dan komentar tipe string di sini daripada pengalih aktif / nonaktif blok kode sederhana.
Thell
70

Anda dapat melakukan ini dengan mudah di RStudio :

pilih kode dan klik CTR+ SHIFT+ C untuk mengomentari / menghapus kode.

Salvador Dali
sumber
36

Trik rapi untuk RStudio yang baru saya temukan adalah menggunakannya #'karena ini membuat bagian komentar yang meluas sendiri (saat Anda kembali ke baris baru dari baris seperti itu atau menyisipkan baris baru ke dalam bagian semacam itu, secara otomatis berkomentar).

geotheory
sumber
1
+1 tapi saya salah dulu - mungkin ini lebih mudah dibaca:#'
bluenote10
Ini rapi! Bagus. Seseorang harus menggabungkan jawaban ini dengan yang disediakan oleh @Salvador karena ini dapat digunakan dalam kasus yang berbeda.
Alex Feng
21

[Update] Berdasarkan komentar.

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

[Jawaban Asli]

Berikut cara lain ... lihat gambar di bagian bawah. Potong dan tempel blok kode ke RStudio.

Komentar multiline yang membuat penggunaan IDE lebih efektif adalah "Hal yang Baik", sebagian besar IDE atau editor sederhana tidak memiliki penyorotan teks dalam blok komentar -out sederhana; meskipun beberapa penulis telah meluangkan waktu untuk memastikan penguraian dalam string di sini. Dengan R kami juga tidak memiliki komentar multi-baris atau di sini-string, tetapi menggunakan ekspresi tak terlihat di RStudio memberikan semua kebaikan itu.

Selama tidak ada backticks di bagian yang diinginkan untuk digunakan untuk komentar multiline, here-string, atau blok komentar yang tidak dieksekusi, maka ini mungkin sesuatu yang berharga.

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

Dan ini fotonya ...

Komentar Terstruktur

Thell
sumber
1
Saya pikir Anda dapat menentukan comment=function(z){invisible(expression(z))}mana yang mungkin membantu orang memahami apa yang sedang terjadi!
Spacedman
1
Mungkin lebih baik Comments<-function(`@Comments`)rm(`@Comments`),. Karena komentar sudah menjadi fungsi yang valid.
Thell
1
Apakah Anda benar-benar perlu melakukan sesuatu dengan argumen tersebut? Comments=function(x){}akan berfungsi untuk di mana xekspresi multiline dibatasi oleh backquote. Itu tidak akan mencoba untuk mengevaluasinya ...
Spacedman
Sumber dengan gema menunjukkan NULL ketika kawat gigi kosong tidak mengandung invisible ()
Thell
Tetapi dengan Comment <- function(`@Comments`) {invisible()}, jika komentar terlalu panjang, Anda mendapatkan error:variable names are limited to 10000 bytes
Nir
11

Saya dapat memikirkan dua opsi. Opsi pertama adalah menggunakan editor yang memungkinkan untuk memblokir komentar dan komentar (mis. Eclipse). Opsi kedua adalah menggunakan pernyataan if. Tapi itu hanya akan memungkinkan Anda untuk 'memberi komentar' pada sintaks R. Karenanya editor yang baik adalah solusi yang lebih disukai.

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

}
Thierry
sumber
9

Jika merasa luar biasa bahwa bahasa apa pun tidak akan melayani ini.

Ini mungkin solusi terbersih:

anything="
first comment line
second comment line
"
R. Sake
sumber
3
Berfungsi dengan baik kecuali Anda ingin kutipan dalam komentar Anda;)
abalter
7

Selain menggunakan cara yang berlebihan untuk mengomentari kode multi-baris hanya dengan menginstal RStudio, Anda dapat menggunakan Notepad ++ karena mendukung penyorotan sintaks R

(Pilih multi-baris) -> Edit -> Komentar / Hapus Komentar -> Alihkan Blokir Komentar

Perhatikan bahwa Anda perlu menyimpan kode sebagai sumber .R terlebih dahulu (disorot dengan warna merah)

Perhatikan bahwa Anda perlu menyimpan kode sebagai sumber .R terlebih dahulu (disorot dengan warna merah)

im_chc
sumber
2

Saya menggunakan vim untuk mengedit skrip R.

Misalkan skrip R adalah test.R, yang berisi "Baris 1", "Baris 2", dan "Baris 3" pada 3 baris terpisah.

Saya membuka test.R pada baris perintah dengan Vim dengan mengetik "vim test.R". Lalu saya pergi ke baris pertama yang ingin saya beri komentar, ketik "Control-V", panah bawah ke baris terakhir yang ingin saya beri komentar, ketik huruf besar I yaitu "I" untuk menyisipkan, ketik "#", lalu tekan tombol Escape untuk menambahkan "#" ke setiap baris yang saya pilih dengan panah ke bawah. Simpan file di Vim dan kemudian keluar dari Vim dengan mengetik ": wq". Perubahan akan muncul di Rstudio.

Untuk menghapus komentar di Vim, mulailah dari baris pertama di atas karakter "#" yang ingin Anda hapus, lagi lakukan "Control-V", dan panah ke bawah ke baris terakhir yang ingin Anda hapus "#". Lalu ketik "dd". Tanda "#" harus dihapus.

Ada jeda waktu selama beberapa detik antara saat perubahan pada test.R di Vim tercermin di Rstudio.

Qian Zhang
sumber
0

Di RStudio, cara mudah untuk melakukan ini adalah dengan menulis komentar Anda dan setelah Anda menggunakan CTRL + Shift + C untuk mengomentari baris kode Anda, kemudian gunakan CTRL + SHIFT + / untuk mengubah komentar Anda menjadi beberapa baris untuk kemudahan membaca.

Mark Stevenson
sumber
-2

Dengan Python Anda membuat komentar multiline dengan 3x tanda kutip tunggal sebelum dan sesudah komentar. Saya mencoba ini di R dan sepertinya berhasil juga.

Misalnya.

'''
This is a comment
This is a second comment
'''
P.Roberto Bakker Doornebal
sumber