5

我一直致力于为工作编写可读的代码和样式指南。我了解 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 个字符的限制(除了所有潜在的格式问题)?

4

1 回答 1

3

首先,我会拆分您匹配的值:

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]
于 2015-08-24T19:38:47.803 回答