为了使代码更具可读性,我希望避免在创建新对象时已经存在的对象名称。由于R的基于包的性质,并且由于函数是一类对象,因此可以很容易地覆盖不包含在基本R中的通用函数(因为通用包可能使用短函数名,但不知道要使用哪个包加载,则无法对其进行检查)。诸如内置逻辑T和F之类的对象也会引起麻烦。

我想到的一些例子是:

一个字母


C
Ť
T / F
Ĵ


两个字母


df


更好的解决方案可能是避免完全使用短名称,而使用描述性更强的名称,我通常出于习惯而尝试这样做。然而,用于处理通用data.frame的函数的“ df”具有足够的描述性,较长的名称几乎没有什么用,所以简称有其用途。另外,对于不一定知道较大上下文的SO问题,几乎不可能提出描述性名称。

还有其他一个字母和两个字母的变量名称与现有R对象冲突吗?其中应避免的足够普遍的是什么?如果它们不在base中,请同时列出软件包。最好的答案将至少涉及一些代码。如果使用,请提供。

请注意,我并不是在问是否建议覆盖已经存在的功能。这个问题已经解决了:

In R, what exactly is the problem with having variables with the same name as base R functions?

有关此处的一些答案的可视化效果,请参见有关简历的以下问题:

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

最佳答案

apropos为此非常理想:

apropos("^[[:alpha:]]{1,2}$")


没有加载任何包,将返回:

 [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"


确切的内容将取决于搜索列表。如果您担心与通常使用的软件包发生冲突,请尝试加载一些软件包并重新运行。



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

lapply(rownames(installed.packages()), require, character.only = TRUE)


然后重新调用apropos,将其包装在unique中,因为有一些重复项。

one_or_two <- unique(apropos("^[[:alpha:]]{1,2}$"))


这返回:

  [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"


您可以看到它们的来源

lapply(one_or_two, find)

关于r - 哪些1-2个字母的对象名称与现有的R对象冲突?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6979630/

10-11 23:04
查看更多