r语言 - 如何避免污染当前范围(使用 'library(..)`).



作为长期策略,我避免将名称导入(也称为"污染")当前范围,而是在引用不同包中定义的项目时使用完全限定的名称。

下面的脚本显示,在 R 中,使用限定名称本身是不够的。

#!/usr/bin/env Rscript
set.seed(0)
x <- local({
         x0 <- matrix(rnbinom(80, size = 5, mu = 10), nrow = 20)
         `rownames<-`(rbind(0, c(0, 0, 2, 2), x0),
                      paste("Tag", 1:(nrow(x0) + 2), sep = "."))
     })
y <- edgeR::DGEList(counts = x,
                    group = rep(1:2, each = 2),
                    lib.size = 1001:1004)
## library(edgeR)
y[1, 1]

脚本失败,并显示

Error in y[1, 1] : incorrect number of dimensions
Execution halted

该脚本的唯一罪行似乎是没有在失败语句之前的某处包含library(edgeR)行,因为如果取消注释注释掉的行,错误就会消失。

这是巫毒教,恕我直言。

有没有办法避免错误而不会用library(edgeR)污染当前范围?

避免加载edgeR包时,也会避免加载执行y[1, 1]所必需的[.DGEList方法。 如果您不想加载edgeR库,则需要直接调用提取函数:

edgeR::`[.DGEList`(y, 1, 1)

如果你不喜欢完全限定的语法,你可以引入你需要的方法

`[.DGEList` <- edgeR::`[.DGEList`

然后y[1, 1]将按预期工作。 但这是另一种形式的污染,我不确定我是否会推荐它作为一般解决方案。

相关内容

  • 没有找到相关文章

最新更新