如何从 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
是一个复杂的列表,或者其他奇怪的对象,如果您认为有可能将类似的东西传递给函数。
如何从当前函数环境中删除对象? 我正在努力实现这一目标:
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
是一个复杂的列表,或者其他奇怪的对象,如果您认为有可能将类似的东西传递给函数。