我有两个R脚本。 scriptB通过source(“scriptB.R”)
在scriptA中调用 scriptA和scriptB加载相同的library(x)
,其中x为knitr
或stringr
或其他一些软件包
但是,因为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()
,以便它可以优雅地失败吗?
所以我的问题是:
采用R脚本是从R脚本中包含对象的最佳方式,还是采用更友好的方式
如何避免脚本尝试卸载软件包x?
答案 0 :(得分:0)
好的,我把它排序了。我认为的问题是我在scriptA或B中使用旧版本的stringr所以我更新了包,现在运行正常。如果存在版本差异,我想R卸载相同的库,并且可能更喜欢最后调用的库。这是我唯一的解释。
我仍然有点困惑,因为我在加载它时没有指定库的版本而我虽然rstudio只保留了一个版本的包。