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

How do I remove an object from within a function environment in R?

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

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

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

如果你愿意,你可以看我的DepthPlotter脚本,我想让第二个函数检查depth是否是一个dataframe,如果是,就把它分配给df 并从环境中删除 depth

这里是关于如何使用 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 是一个复杂的列表,或者其他奇怪的对象,如果您认为有可能将类似的东西传递给函数。