【问题标题】:Why are " preferred over ' in R为什么在 R 中“优先于”
【发布时间】:2012-11-30 02:22:14
【问题描述】:

来自help("'")

单引号和双引号分隔字符常量。他们可以使用 可互换,但双引号是首选(和字符 常量使用双引号打印),所以单引号是 通常仅用于分隔包含 double 的字符常量 引号。

如果它们可以互换,为什么首选双引号?在我自己的用法中,我还没有发现它们之间的区别。特别令人惊讶的是允许混合字符向量:

> c("a",'b',"c")
[1] "a" "b" "c"

编辑

我想我真的在这里问两个问题:

  1. 是否存在'" 行为不同的情况?
  2. 如果不是,为什么按照惯例选择" 作为首选版本?

到目前为止,答案都与 (2) 相关,但 (1) 至少同样受关注。

【问题讨论】:

  • 一种可能性:与常用字符(如反引号和重音符号)以及文本数据中使用的单引号(如名称中的单引号,如“O'Reilly”)混淆的可能性较小。
  • 据我所知,此文档由 Brian Ripley 于 2005 年 6 月 14 日添加:github.com/wch/r-source/commit/…

标签: string r


【解决方案1】:

我不知道单引号与双引号不同的任何情况。我认为首选是由于可读性和避免单引号与反引号的潜在混淆, 处理方式不同。湿件中的眼脑系统可能很难识别与单引号配对的不匹配的反引号。

> `newfn` <- function() {}
> newfn
function() {}
> "newfn" <- function() {}
> newfn
function() {}
> 'newfn' <- function() {}
> newfn
function() {}
> var <- c(`a`, "b", 'c')
Error: object 'a' not found
> var <- c( "b", 'c')
> var
[1] "b" "c"
> a <- 1
> identical(`a`, a)
[1] TRUE

因此,对于名称的分配,它们(s 引号、d 引号和反引号)在来自 function 的分配的 LHS 上都以相同的方式处理,但未引用的 a 和反引号a 在命令行中是相同的,并且不同于引用的“a”或“a”。

另一种可能存在差异的情况是数据输入。人名可能有单引号,您可能希望查看read.table 函数对两种不同引号的处理。默认情况下,它使用两种类型的引号,但可能需要通过设置 quote="\"" 来“关闭”单引号的引用操作,这样您就不会错误地将大块数据变成单个文本字段。 count.fields 函数与 read.table 具有相同的默认值,因此使用它进行初步运行以检查因单引号不匹配导致的缩短的行是有意义的:

 table( count.fields('filnam.ext') )

【讨论】:

    【解决方案2】:

    我的猜测是“单引号”作为撇号出现的频率要高得多,所以更喜欢双引号会减少用撇号搞砸事情的机会。

    【讨论】:

      【解决方案3】:

      关于第一个问题,在任何情况下'和"的行为不同吗?,我认为重要的是要注意,因为

      identical("a", 'a')
      TRUE
      

      R 用户(包括软件包开发人员)无法区分两者之间的差异,因此无法为其中一个或另一个创建不同的行为。

      【讨论】:

      • 没错,但仍然可能存在解析器差异。
      【解决方案4】:

      为了避免那些习惯于在 C 语言家族(C、C++、Java) 单引号和双引号的含义。 C 程序员将“a”读为单个字符,将“a”读为一个字符 由字母 'a' 后跟一个空字符组成的字符串 终止字符串。在 R 中没有字符数据类型,有 只有字符串。为了与其他语言保持一致,它有助于 如果字符串由双引号分隔。单引号 R中的版本是为了方便。在大多数键盘上,您不需要 使用 shift 键输入单引号,但您确实需要 shift 双引号。

      【讨论】:

      • 为了与其他语言保持一致,如果字符串用双引号分隔会有所帮助。好吧,这取决于您在说什么其他语言。 Perl 程序员会发现使用单引号更加一致,因为从不解释 R 字符串。 dummies.com/how-to/content/…
      猜你喜欢
      • 2016-12-08
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      • 2014-01-12
      • 2022-11-30
      • 2014-01-17
      相关资源
      最近更新 更多