为了使代码更具可读性,我希望避免在创建新对象时已经存在的对象名称。由于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/