我正在try 为我的定制S4类定义一个subset
方法.当我直接将子集设置标准提供给subset
时,子集设置可以按预期工作,但每当我在另一个函数中调用它时,该方法都会失败,其中子集设置标准将从该函数传递到subset
.
S4类myClass
由单个data.frame
组成:
# Define class
setClass("myClass", slots = c(data = "data.frame"))
# Initiate a myClass object
dat <- new("myClass", data = data.frame(Letter = c("A", "A", "B"), Number = c(1, 2, 3)))
为了能够根据槽data
中的data.frame
的内容设置类的子集,我定义了以下subset
方法:
setMethod("subset", signature(x = "myClass"), function(x, ...) {
x@data <- subset(x@data, ...)
return(x)
})
当按如下方式调用时,该方法按预期工作:
# Assume we only want to retain entries containing the letter "A"
whichletter <- "A"
# Subset (does work)
subset(dat, Letter %in% whichletter)
An object of class "myClass"
Slot "data":
Letter Number
1 A 1
2 A 2
但是,当我try 在另一个函数中运行subset
时,其中子集条件是通过该函数的参数提供的,子集将不起作用:
# Random function that takes a letter `let`as argument
randomFunction <- function(object, let) {
object_subsetted <- subset(object, Letter %in% let)
return(object_subsetted)
}
# Subset (does not work)
randomFunction(object = dat, let = whichletter)
Error in Letter %in% let: object 'let' not found
这似乎是环境的问题,但我不知道到底是哪里出了问题.有没有人有建议如何避免这个错误?