为什么R中的“首选”

时间:2012-11-30 02:22:14

标签: string r

来自help("'")

  

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

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

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

修改

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

  1. 是否存在'"表现不同的情况?
  2. 如果没有,为什么按惯例选择"作为首选版本?
  3. 到目前为止,答案与(2)有关,但(1)至少与兴趣一样。

4 个答案:

答案 0 :(得分: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

因此,对于名称的赋值,它们(s-quotes,d-quotes和back-ticks)在function的赋值的LHS上都是相同的,但是不带引号的a和后面勾选的a在命令行中是相同的,并且与引用的“a”或“a”中的任何一个都不同。

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:3)

关于第一个问题,是否存在'和'表现不同的情况?,我认为重要的是要注意,因为

identical("a", 'a')
TRUE

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

答案 3 :(得分:2)

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