相关疑难解决方法(0)

如何在不重启R的情况下卸载软件包?

我想卸载一个包而不必重新启动R(主要是因为重新启动R,因为我尝试了不同的,冲突的包令人沮丧,但可以想象这可以在一个程序中使用一个函数然后另一个 - 虽然命名空间引用可能是一个更好的主意用于此用途).

?library 没有显示任何可以卸载包的选项.

有一种建议detach可以卸载包,但以下两个失败:

detach(vegan)
Run Code Online (Sandbox Code Playgroud)

错误detach(vegan):无效name参数

detach("vegan")
Run Code Online (Sandbox Code Playgroud)

错误detach("vegan"):无效name参数

那么如何卸载包呢?

r package r-faq

496
推荐指数
9
解决办法
31万
查看次数

如何通过调用在其名称空间中没有它的函数来找到未附加包中的非导入方法?

R命名空间充当其关联包中所有函数的直接环境.换句话说,当函数bar()从包调用另一个函数时,R首次评估器搜索中的其他功能<environment: namespace:foo>,那么"imports.foo",<environment: namespace:base>,<environment: R_GlobalEnv>,等下键入返回的搜索列表search().

命名空间的一个很好的方面是它们可以使包像行为更好的公民:未经输出的函数<environment: namespace:foo>和函数imports:foo仅可用:(a)foo中的函数; (b)从foo进口的其他包裹; 或(c)通过完全合格的函数调用,如foo:::bar().

或者直到最近才想到......

行为

这个最近的SO问题突出了一个案例,其中通过调用看似无关的函数找到了一个隐藏在其包的名称空间中的函数:

group <- c("C","F","D","B","A","E")
num <- c(12,11,7,7,2,1)
data <- data.frame(group,num)

## Evaluated **before** attaching 'gmodels' package
T1 <- transform(data, group = reorder(group,-num))

## Evaluated **after** attaching 'gmodels
library(gmodels)
T2 <- transform(data, group = reorder(group,-num))

identical(T1, T2) 
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)

它的直接原因

@Andrie通过指出gmodels从包gdata导入来回答原始问题,包中包含一个 …

namespaces r scoping

29
推荐指数
1
解决办法
894
查看次数

标签 统计

r ×2

namespaces ×1

package ×1

r-faq ×1

scoping ×1