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

问题描述 投票:1回答:1

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

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

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

[如果需要,您可以观看我的DepthPlotter脚本,在这里我要让第二个功能检查depth是否为数据帧,如果是,则将其分配给df并从中删除depth环境。

r function environment
1个回答
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以外的any案例调用data.frame方法,因此,如果您采用这种方法,则需要在其中编写一些代码来检查depth之类的奇怪案例是一个复杂的列表或其他奇怪的对象,如果您认为有可能将类似的内容传递给该函数。

© www.soinside.com 2019 - 2024. All rights reserved.