在采购R脚本时在何处加载包

时间:2017-08-18 08:10:31

标签: r

我有两个R脚本。 scriptB通过source(“scriptB.R”)

在scriptA中调用

scriptA和scriptB加载相同的library(x),其中x为knitrstringr或其他一些软件包

但是,因为scriptB调用library(x),所以似乎scriptA被迫卸载其library(x),然后加载scriptB library(x)。这会导致以下错误:

Error in unloadNamespace(package) : 
  namespace 'x' is imported by 'y' so cannot be unloaded
Error in library(x) : Package 'x' version n.nn cannot be unloaded

我实际上并没有在源脚本中调用unloadNamespace,所以我不确定为什么会发生这种情况?如何防止卸载。我应该在scriptA中使用require(),以便它可以优雅地失败吗?

所以我的问题是:

  1. 采用R脚本是从R脚本中包含对象的最佳方式,还是采用更友好的方式

  2. 如何避免脚本尝试卸载软件包x?

1 个答案:

答案 0 :(得分:0)

好的,我把它排序了。我认为的问题是我在scriptA或B中使用旧版本的stringr所以我更新了包,现在运行正常。如果存在版本差异,我想R卸载相同的库,并且可能更喜欢最后调用的库。这是我唯一的解释。

我仍然有点困惑,因为我在加载它时没有指定库的版本而我虽然rstudio只保留了一个版本的包。