我正在尝试卸载包含所有依赖项的包。我遇到的问题是卸载依赖项的顺序。因为依赖关系是递归的,所以只能从依赖关系树的自下而上卸载它们。
R中是否有一种简单或本土化的方法来实现这一点?下面是我想完成的第一步:
eval_current<-function(expr,envir=parent.frame(),超时=60){#设置超时setTimeLimit(已用时间=超时,瞬态=真);#当前加载的包当前附加的<-search();当前加载的<-loadedNamespaces();on.exit(退出)({#重置时间限制设置时间限制(cpu=Inf,运行时间=Inf、瞬态=FALSE);#尝试分离评估期间附加的包现在附加<-search();todetach<-nowattached[!(以%currentlyattached表示的nowattached%)];for(i in seq_along(todetach)){try(分离(分离[i],unload=TRUE,character.only=TRUE);}#尝试卸载仍在加载的程序包nowloaded<-loadedNamespaces();tounload<-nowloaded[!(当前加载%中的当前加载%)];for(i in seq_along(tounload)){try(unloadNamespace(tounload[i]));} });评估(expr,envir)}
但结果是:
>eval_current({库(ggplot2);qplot(rnorm(100));})unloadNamespace(tounload[i])中出错:命名空间“colorspace”由“munsell”导入,因此无法卸载unloadNamespace(tounload[i])中出错:命名空间“dichromat”由“scales”导入,因此无法卸载unloadNamespace(tounload[i])中出错:命名空间“grid”由“gtable”导入,因此无法卸载unloadNamespace(tounload[i])中出错:命名空间“labeling”由“scales”导入,因此无法卸载unloadNamespace(tounload[i])中出错:命名空间“munsell”由“scales”导入,因此无法卸载