转移require()的输出

时间:2018-08-07 22:36:13

标签: r

启动R时,我在Rprofile.site中使用此代码加载程序包。

pkg <- c("dplyr", "tidyr", "crayon", "xlsx")
apply(as.matrix(pkg), 1, function(x) {
    if (!x %in% utils::installed.packages()) {
        utils::install.packages(x)
        cat(paste0("package ", x, " installed\n"))
    }
    x <- require(x, character.only = T)
})

它可以正常工作,但是将[1] TRUE TRUE TRUE TRUE打印到控制台。我知道我可以使用stdout来转移textConnection(); sink(); [code]; sink(); close(),但这似乎需要很多工作。有没有一种方法可以减少打字?

tc <- textConnection("outputs","w")
sink(tc, type="output")
    pkg <- c("dplyr", "tidyr", "crayon", "xlsx")
    apply(as.matrix(pkg), 1, function(x) {
        if (!x %in% utils::installed.packages()) {
            utils::install.packages(x)
            cat(paste0("package ", x, " installed\n"))
        }
        require(x, character.only = T)
    })
sink(NULL, type="output")
close(tc)

1 个答案:

答案 0 :(得分:2)

选项:

  1. 您可以对d的输出使用invisible删除输出。

  2. 或者您可以使用apply包执行您的操作。

  3. 或者下面的代码应该更简洁(请参见 Check for installed packages before running install.packages()):

pacman
  1. 或编写一个R包以明确​​显示您的依赖项。