1-2个字母对象名称与现有R对象冲突的是什么?

Ari*_*man 14 r naming-conventions

为了使我的代码更具可读性,我想避免在创建新对象时已经存在的对象的名称.由于R的基于包的特性,并且因为函数是第一类对象,所以可以很容易地覆盖不在基R中的常见函数(因为常见的包可能使用短函数名但不知道哪个包是加载没有办法检查它).诸如内置逻辑T和F之类的对象也会引起麻烦.

想到的一些例子是:

一个字母

  • C
  • Ť
  • T/F
  • Ĵ

两个字母

  • DF

一个更好的解决方案可能是避免使用简短的名称来支持更具描述性的名称,我通常会尝试将其作为习惯问题.然而,操作通用data.frame的函数的"df"是充分描述性的,而较长的名称几乎没有增加,因此短名称有其用途.此外,对于不一定知道较大背景的SO问题,提出描述性名称几乎是不可能的.

还有哪些单字母和双字母变量名称与现有R对象冲突? 其中哪些是足够常见的,应该避免它们?如果他们不在base,请列出包裹.最好的答案至少涉及一些代码; 如果使用请提供.

请注意,我不是在询问是否可以覆盖已存在的函数.这个问题已在SO上得到解决:

在R中,具有与基本R函数同名的变量究竟是什么问题?

有关此处某些答案的可视化,请在简历中查看此问题:

https://stats.stackexchange.com/questions/13999/visualizing-2-letter-combinations

Ric*_*ton 19

apropos 非常适合这个:

apropos("^[[:alpha:]]{1,2}$")
Run Code Online (Sandbox Code Playgroud)

如果没有加载包,则返回:

 [1] "ar" "as" "by" "c"  "C"  "cm" "D"  "de" "df" "dt" "el" "F"  "gc" "gl"
[15] "I"  "if" "Im" "is" "lh" "lm" "ls" "pf" "pi" "pt" "q"  "qf" "qr" "qt"
[29] "Re" "rf" "rm" "rt" "sd" "t"  "T"  "ts" "vi"
Run Code Online (Sandbox Code Playgroud)

具体内容取决于搜索列表.如果您关心与常用软件包的冲突,请尝试加载一些软件包并重新运行它.


我加载了我的机器上安装的所有(> 200)软件包:

lapply(rownames(installed.packages()), require, character.only = TRUE)
Run Code Online (Sandbox Code Playgroud)

然后重新调用apropos它,将其包装进去unique,因为有一些重复.

one_or_two <- unique(apropos("^[[:alpha:]]{1,2}$"))
Run Code Online (Sandbox Code Playgroud)

这返回:

  [1] "Ad" "am" "ar" "as" "bc" "bd" "bp" "br" "BR" "bs" "by" "c"  "C" 
 [14] "cc" "cd" "ch" "ci" "CJ" "ck" "Cl" "cm" "cn" "cq" "cs" "Cs" "cv"
 [27] "d"  "D"  "dc" "dd" "de" "df" "dg" "dn" "do" "ds" "dt" "e"  "E" 
 [40] "el" "ES" "F"  "FF" "fn" "gc" "gl" "go" "H"  "Hi" "hm" "I"  "ic"
 [53] "id" "ID" "if" "IJ" "Im" "In" "ip" "is" "J"  "lh" "ll" "lm" "lo"
 [66] "Lo" "ls" "lu" "m"  "MH" "mn" "ms" "N"  "nc" "nd" "nn" "ns" "on"
 [79] "Op" "P"  "pa" "pf" "pi" "Pi" "pm" "pp" "ps" "pt" "q"  "qf" "qq"
 [92] "qr" "qt" "r"  "Re" "rf" "rk" "rl" "rm" "rt" "s"  "sc" "sd" "SJ"
[105] "sn" "sp" "ss" "t"  "T"  "te" "tr" "ts" "tt" "tz" "ug" "UG" "UN"
[118] "V"  "VA" "Vd" "vi" "Vo" "w"  "W"  "y"
Run Code Online (Sandbox Code Playgroud)

你可以看到他们来自哪里

lapply(one_or_two, find)
Run Code Online (Sandbox Code Playgroud)

  • 这是周期表!:) (2认同)
  • @gsk:是的 它是一个非常古老的机器的组合,并安装随机包来回答关于SO的问题. (2认同)