gpt4 book ai didi

r - 如何从 R 工作区中删除所有自定义方法和类?

转载 作者:行者123 更新时间:2023-12-04 14:27:27 24 4
gpt4 key购买 nike

我最近一直在用 S4 类进行很多实验,为了从我的工作区中清除所有类定义和自定义方法,重新启动 R 是一种痛苦。显然rm(list=ls(all.names=TRUE))没有用。我可以通过一行一行地编写行来手动删除所有类和方法,但我确信必须有更简单的方法。

一个展示我的问题的例子:

.myClass <- setClass("myClass", representation=representation(mySlot="numeric"))
mySlot <- function(x) x@mySlot
setMethod("[", signature=c("myClass", "numeric", "missing"), function(x, i, j, ...) {
initialize(x, mySlot=mySlot(x)[i])
})

尝试使用 rm() 删除所有内容:
rm(list=ls(all.names=TRUE))

但是,类定义和自定义方法仍然存在:
> x <- new("myClass", mySlot=1:4)
> x[1]
Error in x[1] : could not find function "mySlot"

mySlot()是一个用 rm 移除的对象,但该方法引用 mySlot()留下了。我想知道如何一举删除所有类和所有自定义方法。

最佳答案

很难知道您希望 R 记住您的 session 。你可以

removeClass("myClass", where=.GlobalEnv)
removeMethods("[", where=.GlobalEnv)

或者如果您忘记了您所做的一切,以下技巧可能会有所帮助
## Class definitions are prefixed by '.__C__'
mangled <- grep(".__C__", ls(all=TRUE, envir=.GlobalEnv), value=TRUE)
classes <- sub(".__C__", "", mangled)
for (cl in classes) removeClass(cl, where=.GlobalEnv)

## Methods tables are prefixed by '.__T__'
mangled <- grep(".__T__", ls(all=TRUE, envir=.GlobalEnv), value=TRUE)
methods <- unique(sub(".__T__(.*):.*", "\\1", mangled))
for (meth in methods) removeMethods(meth, where=.GlobalEnv)

关于r - 如何从 R 工作区中删除所有自定义方法和类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25978765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com