Çok Satırlı Yorum Geçici Çözümleri?


108

Bu sorunun cevabını (bir nevi) zaten biliyorum. Ancak bunun R Kullanıcıları listesinde çok sık sorulan bir soru olduğunu, sağlam ve iyi bir cevap olması gerektiğini düşündüm. Bildiğim kadarıyla, R'de çok satırlı yorum işlevi yoktur. Peki, herhangi bir iyi çözüm olan var mı?

R'de epeyce çalışma genellikle etkileşimli oturumları içerirken (bu, çok satırlı yorumların gerekliliği konusunda şüphe uyandırır), çoğu zaman önemsiz kod blokları içeren meslektaşlara ve sınıf arkadaşlarına komut dosyaları göndermek zorunda kaldığım zamanlar oldu. Ve diğer dillerden gelen insanlar için bu oldukça doğal bir sorudur.

Geçmişte alıntılar kullandım. Dizeler satır kesmelerini desteklediğinden, bir R betiğini çalıştırarak

"
Here's my multiline comment.

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

iyi çalışıyor. Daha iyi bir çözümü olan var mı?

Yanıtlar:


50

Bu, posta listesinde oldukça düzenli olarak ortaya çıkıyor, örneğin r-help'deki bu son konuya bakın . Mutabakat cevabı genellikle yukarıda gösterilen cevaptır: dilin doğrudan bir desteği olmadığı göz önüne alındığında, ikisinden birini yapmalısınız.

  • Bölgeden yoruma komutları olan bir düzenleyiciyle çalışın ve çoğu gelişmiş R editörünün
  • if (FALSE)Daha önce önerilen yapıları kullanın, ancak yine de tam ayrıştırma gerektirdiğini ve bu nedenle sözdizimsel olarak doğru olması gerektiğini unutmayın

Teşekkürler. Çok satırlı yorumlar için herhangi bir olasılığın olup olmadığı, felsefi bir şey olup olmadığı, vb. Konusunda biraz genişletebilir misiniz?
HamiltonUlmer

1
Bence bu, ayrıştırıcının doğasından ve R'nin aynı zamanda çok satırlı yorumların daha yaygın olacağı dosya tabanlı bir yorumlayıcıdan ziyade etkileşimli bir ortam (yani komut satırı) olduğu gerçeğinden kaynaklanıyor. Yani felsefi değil - bu şekilde büyüdü.
Dirk Eddelbuettel

Artık R kodu derlediğine göre, çok satırlı yorumların bir görünüme kavuşacağını düşünüyor muyuz?
Ari B. Friedman

Hayır, temeldeki ayrıştırıcı değişmediğinden.
Dirk Eddelbuettel

Doğru sözdizimi gerektirmeyen bir yanıt gönderdim, ancak burada dizgi türü belgeleme ve yorumlama için basit kod bloğu etkinleştirme / devre dışı bırakma geçişinden daha fazlası.
Thell

70

Bunu RStudio'da kolayca yapabilirsiniz :

kodu seçin ve kodu yorumlamak / yorumu kaldırmak için CTR+ SHIFT+ ' Cya tıklayın .


36

RStudio için yeni keşfettiğim düzgün bir numara #', bu kendi kendine genişleyen bir yorum bölümü oluşturduğu için kullanmaktır (böyle bir satırdan yeni satıra döndüğünüzde veya böyle bir bölüme yeni satırlar eklediğinizde, bu otomatik olarak yorumdur).


1
+1 ama önce yanlış anladım - belki bu daha okunabilir:#'
bluenote10

Bu harika! Muhteşem bir tane. Birisi bu yanıtı @Salvador tarafından sağlanan yanıtla birleştirmelidir çünkü bunlar farklı durumlarda kullanılabilir.
Alex Feng

21

[Güncelleme] Yorumlara göre.

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

[Orijinal Cevap]

İşte başka bir yol ... alttaki resme bakın. Kod bloğunu kesip RStudio'ya yapıştırın.

Bir IDE'yi daha etkili hale getiren çok satırlı yorumlar "İyi Şey" dir, çoğu IDE veya basit düzenleyici basit yorumlu bloklar içinde metin vurgulamasına sahip değildir; ancak bazı yazarlar buradaki dizelerin ayrıştırılmasını sağlamak için zaman ayırmışlardır. R ile çok satırlı yorumlarımız veya buradaki dizelerimiz de yok, ancak RStudio'da görünmez ifadeler kullanmak tüm bu iyiliği veriyor.

Çok satırlı yorumlar, buradaki dizeler veya çalıştırılmayan yorum blokları için kullanılması istenen bölümde ters işaretler olmadığı sürece, bu değerli bir şey olabilir.

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

Ve işte fotoğraf ...

Yapılandırılmış Yorumlar


1
Sanırım comment=function(z){invisible(expression(z))}hangisinin insanların neler olup bittiğini anlamalarına yardımcı olabileceğini tanımlayabilirsiniz !
Spacedman

1
Belki daha da iyi Comments<-function(`@Comments`)rm(`@Comments`). Yorum zaten geçerli bir işlev olduğundan.
Thell

1
Arg ile gerçekten bir şey yapmanız gerekiyor mu? backquote ile ayrılmış çok satırlı ifadenin Comments=function(x){}nerede xolduğu için çalışacaktır . Bunu değerlendirmeye çalışmayacak ...
Spacedman


Ancak Comment <- function(`@Comments`) {invisible()}yorum çok uzunsa, bir hata alırsınız:variable names are limited to 10000 bytes
Nir

11

İki seçenek düşünebilirim. İlk seçenek, yorum ve yorum kaldırmayı engellemeye izin veren bir düzenleyici kullanmaktır (örn. Eclipse). İkinci seçenek, bir if ifadesi kullanmaktır. Ancak bu, yalnızca doğru R sözdizimini 'yorumlamanıza' izin verecektir. Bu nedenle, iyi bir düzenleyici, tercih edilen geçici çözümdür.

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

}

9

Herhangi bir dilin buna cevap vermemesini inanılmaz bulursan.

Bu muhtemelen en temiz çözümdür:

anything="
first comment line
second comment line
"

3
Yorumunuzda alıntı istemediğiniz sürece iyi çalışıyor;)
abalter

7

Sadece RStudio'yu kurarak çok satırlı kodları yorumlamak için gereğinden fazla yol kullanmanın yanı sıra , R'nin sözdizimi vurgulamasını desteklediği için Notepad ++ kullanabilirsiniz .

(Çok satırlı seçin) -> Düzenle -> Yorum Yap / Açıklamayı Kaldır -> Blok Açıklamayı Değiştir

Önce kodu bir .R kaynağı olarak kaydetmeniz gerektiğini unutmayın (kırmızıyla vurgulanmıştır)

Önce kodu bir .R kaynağı olarak kaydetmeniz gerektiğini unutmayın (kırmızıyla vurgulanmıştır)


2

R betiğini düzenlemek için vim kullanıyorum.

R betiğinin test.R olduğunu ve 3 ayrı satırda "Satır 1", "Satır 2" ve "Satır 3" ü içerdiğini varsayalım.

Test.R'yi komut satırında Vim ile "vim test.R" yazarak açıyorum. Sonra yorum yapmak istediğim 1. satıra gidiyorum, "Control-V" yazıyorum, aşağı oku yorum yapmak istediğim son satıra yazıyorum, eklemek için büyük I, yani "I" yazıyorum, "#" yazıyorum ve sonra Aşağı okla seçtiğim her satıra "#" eklemek için Escape tuşuna basın. Dosyayı Vim'e kaydedin ve ": wq" yazarak Vim'den çıkın. Değişiklikler Rstudio'da görünmelidir.

Vim'deki yorumları silmek için, silmek istediğiniz "#" karakterinin üstündeki ilk satırdan başlayın, tekrar "Control-V" yapın ve bir "#" silmek istediğiniz son satıra doğru aşağı oku. Sonra "gg" yazın. "#" İşaretleri silinmelidir.

Testte yapılan değişikliklerin arasında saniyelik bir gecikme süresi vardır.


0

In RStudio Bunu yapmak için kolay bir yoldur Yorumunuzu yazmak için ve kod Çizginizi yorum yapmak CTRL + Shift + C kullandık kez, o zaman okuma kolaylığı için birden fazla satır üzerine açıklama akıtacak için CTRL + SHIFT + / kullanın.


-2

Python'da yorumlardan önce ve sonra 3x tek tırnakla çok satırlı bir yorum yaparsınız. Bunu R'de denedim ve işe yarıyor gibi görünüyor.

Örneğin.

'''
This is a comment
This is a second comment
'''
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.