为什么R中的"首选"

Ari*_*man 18 string r

来自help("'"):

单引号和双引号分隔字符常量.它们可以互换使用,但首选双引号(字符常量使用双引号打印),因此单引号通常仅用于分隔包含双引号的字符常量.

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

> c("a",'b',"c")
[1] "a" "b" "c"
Run Code Online (Sandbox Code Playgroud)

编辑

我想在这里问两个问题,我想:

  1. 是否有任何情况'"行为不同?
  2. 如果没有,为什么"按惯例选择首选版本?

到目前为止,答案与(2)有关,但(1)至少与兴趣有关.

42-*_*42- 12

我不知道单引号与双引号不同的任何情况.我认为这种偏好是由于可读性和避免单引号可能混淆而后退,这些反引号处理方式不同.湿软件中的眼脑系统可能很难找到与单引号配对的不匹配的后退.

> `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
Run Code Online (Sandbox Code Playgroud)

因此,对于名称的赋值,它们(s-quotes,d-quotes和back-ticks)在赋值的LHS上都处理相同function,但是在命令行上的未引号a和后引号a都相同,并且不同于引用的"a"或"a".

可能存在差异的另一种情况是数据输入.人名可能只有单引号,而且您可能不想查看read.table函数对两种不同引号的处理情况.默认情况下,它使用两种类型的引号,但可能需要通过设置"关闭"单引号的引用操作,quote="\""以便您不会错误地将大量数据转换为单个文本字段.该count.fields函数具有与read.table相同的默认值,因此使用此函数执行初步运行以检查由不匹配的单引号导致的缩短行是有意义的:

 table( count.fields('filnam.ext') )
Run Code Online (Sandbox Code Playgroud)


Nie*_*sol 7

我的猜测是"单引号"更多地出现在撇号中,所以更喜欢双引号会减少使用撇号弄乱事物的可能性.