2015-08-24 45 views
2

我一直在爲工作編寫可讀的代碼和樣式指南。我瞭解80字符限制建議。r 80字符行數限制

偶爾我會寫一長串代碼,如果我堅持80個字符的限制,它的可讀性會降低。

下面是我怎樣格式化代碼的示例(不是80字符柔順的,破折號表示字符)

0--------1---------2---------3---------4---------5---------6---------7---------8 
df$rslt[df$test == "M. ovipneumoniae by ELISA" | 
     df$test == "PCR-Mycoplasma ovipneumoniae"] <- df[df$test == "M. ovipneumoniae by ELISA" | 
                 df$test == "PCR-Mycoplasma ovipneumoniae", 
                 "result"] 

如果我是跟隨80個字符的限制我可以如下

輸入代碼
0--------1---------2---------3---------4---------5---------6---------7---------8 
df$rslt[df$test == "M. ovipneumoniae by ELISA" | 
      df$test == "PCR-Mycoplasma ovipneumoniae"] <- df[df$test == 
                  "M. ovipneumoniae 
                   by ELISA" | 
                  df$test == 
                  "PCR-Mycoplasma 
                   ovipneumoniae", 
                  "result"] 

我發現第一個例子更具可讀性。每個邏輯操作都是一個新行,並且清晰地讀取。第二個例子很容易遵循,但隨着達到80個字符的限制變得複雜。我可以閱讀它,但是我將字符串分成多行,將單個邏輯操作分成多行,等等。

是否可以接受長字符串的80個字符限制(所有潛在的格式化問題)?

+1

你可以換行增加的權賦值'<-',它仍然可以正確編譯;我通常會這樣做,並在這種情況下添加兩個縮進空格(或者'RStudio'中的默認值)。此外,由於字符串重複,您可以考慮將每個字符串存儲爲'str1'和'str2'(例如),然後寫入'df $ rslt [df $ test == str1 | df $ test == str2] ... ' – MichaelChirico

+1

只需按更頻繁地輸入並使用代碼縮進。 –

+0

我不認爲他遇到了錯誤。他只是徵求我們的意見。我認爲StackOverflow社區不贊成意見驅動的問題。你可以看看[這個](http://programmers.stackexchange.com/questions/14856/what-popular-best-practices-are-not-always-best-and-why)。 –

回答

2

首先,我要分出值你匹配:

test_vals = c("M. ovipneumoniae by ELISA", "PCR-Mycoplasma ovipneumoniae") 

然後,我會做邁克爾建議:

df$rslt[ test %in% test_vals ] <- 
    df$result[ test %in% test_vals ] 

# or 
library(data.table) 
setDT(df)[ test %in% test_vals, rslt := result]