如何从R中的函数环境中删除对象?

时间:2015-09-08 19:23:48

标签: r function clear environment

如何从当前功能环境中删除对象? 我正在努力实现这个目标:

foo <- function(bar){
    x <- bar
    rm(bar, envir = environment())
    print(c(x, is.null(bar)))
}

因为我希望函数能够处理多个输入。 具体来说,我试图将数据帧或向量传递给函数,如果我传递数据帧,我想将向量设置为NULL以便以后进行错误处理。

如果需要,您可以观看我的DepthPlotter脚本,我想让第二个功能检查depth是否为数据帧,如果是,请将其分配给df in替换并从环境中删除depth

1 个答案:

答案 0 :(得分:2)

以下是如何使用S3方法调度进行设置的简要草图。

首先,您定义通用:

DepthPlotter <- function(depth,...){
    UseMethod("DepthPlotter", depth)
}

然后为参数depth的特定类定义方法。作为一个非常基本的示例,您可以只创建两个,data.frame方法和default方法来处理向量大小写:

DepthPlotter.default <- function(depth, variable, ...){
    #Here you write a function assuming that depth is
    # anything but a data frame
}

DepthPlotter.data.frame <- function(depth,...){
    #Here you'd write a function that assumes
    # that depth is a data frame
}

然后你可以使用任何一种类型的参数调用DepthPlotter(),并且将根据class(depth)的结果运行正确的函数。

我在这里概述的示例有点粗糙,因为我使用了默认方法来处理矢量大小写。您可以编写.numeric.integer方法来更具体地处理数字或整数向量。在我的示例中,除了.default之外,任何案例都会调用data.frame方法,所以如果你走这条路线,你想在那里写一些代码检查奇怪的情况,如depth是一个复杂的列表,或其他奇怪的对象,如果你认为这样的话可能会传递给函数。