我经常看到新手R程序员的问题,他们习惯于assign创建多个对象,然后在尝试为后续任务操作这些对象时遇到麻烦(最近的一个例子).
assign吸引新手用户,因为它具有动态属性(以编程方式创建变量名称,除了变量的值),并且似乎模仿了全局赋值的一些属性.它的直接名称也使它可能出现在各种问题类型的搜索中.
当然,更有经验的R程序员开始意识到assign创建难以阅读的代码,易于维护的代码,以及通过在高功能R语言中坚决避免的副作用类型的行为.
我在SO最初使用的所有问题上看到的每个问题assign最终在正确使用命名向量,列表或数据帧方面有更好的选择.生成的代码更易于遵循,更易于更改,并且通常性能更高.
所有这一切都是说,很容易找到为什么assign不好的例子.我的问题是:在什么情况下使用assign适当的,首选的或唯一的解决方案?
在相关图中,如何在不重新排列的情况下保持标签与数据文件中的顺序相同?
这是我一直在使用的脚本;
library(corrplot)
library(RColorBrewer)
library(Hmisc)
CORR <- df
M <- cor(CORE)
pM <- rcorr(M)
corrplot(pM$r,
type="upper",
order="hclust",
tl.cex = 0.5,
col=colorRampPalette(c("blue4", "white", "firebrick1"))(100),
p.mat = pM$P,
sig.level = 0.05,
insig = "blank"
)
Run Code Online (Sandbox Code Playgroud)
样本数据
df <- structure(list(Cytosol_1 = c(2.8, 0.31, 1.21, 1.84, 0.93, 2.71, 2.03, 0.93, 0.89, 0.4, 0.32, 1.8, 1.16, 0.39, 1.16, 0.76, 1.17, 0.95, 0.58, 2.68, 0.88, 0.59, 1.49, 0.48, 0.51, 1.04, 0.89, 3.48, 1.47), Cytosol_2 = c(1.61, 0.22, 1.42, 1.97, 0.88, 1.46, 1.43, 0.74, 0.72, 0.43, 0.51, …Run Code Online (Sandbox Code Playgroud)