将数据子集化为 R 中的通用函数
Subsetting data as generic function in R
我正在尝试创建一个函数来绘制整个数据集或数据子集的图形。该函数需要能够做到这两点,以便您可以根据需要绘制子集。我正在为提出通用子集函数而苦苦挣扎。
我目前有这段代码(我更像是一个 SAS 用户,所以 R 让我有点困惑):
subset<-function(dat, varname, val)
if(dat$varname==val) {
data<-subset(dat, dat$varname==val)
}
但 R 不断返回此错误消息:
Error in if (dat$varname == val) { : argument is of length zero
有人可以帮我解决这个问题吗?非常感谢!我想这可能与我写的方式有关。
首先所有的$运算符都不能处理变量。在您的代码中,您总是在查找名为 varname 的列。
将 $varname
替换为 [varname]
。
下一个错误是您以向量为条件,dat$varname==val
将是布尔向量。
代码中的第三个错误是您正在命名函数子集,从而在基础包中覆盖了子集函数。因此,对 subset 的内部调用将是对您自己的函数的递归调用。要修复此问题,请重命名您的函数,或者您必须指定它是您使用 base::subset(dat, dat[varname]==val)
调用的基础包中的子集函数。
代码中的最后一个错误是您的函数没有 return 任何东西。不要将结果分配给变量数据,而是 return 它。
代码如下所示。
mySubset<-function(dat, varname, val)
if(any(dat[varname]==val)) {
subset(dat, dat[varname]==val)
} else {
NA
}
甚至更好
mySubset <- function(dat,varname,val) dat[dat[varname] == val]
我正在尝试创建一个函数来绘制整个数据集或数据子集的图形。该函数需要能够做到这两点,以便您可以根据需要绘制子集。我正在为提出通用子集函数而苦苦挣扎。
我目前有这段代码(我更像是一个 SAS 用户,所以 R 让我有点困惑):
subset<-function(dat, varname, val)
if(dat$varname==val) {
data<-subset(dat, dat$varname==val)
}
但 R 不断返回此错误消息:
Error in if (dat$varname == val) { : argument is of length zero
有人可以帮我解决这个问题吗?非常感谢!我想这可能与我写的方式有关。
首先所有的$运算符都不能处理变量。在您的代码中,您总是在查找名为 varname 的列。
将 $varname
替换为 [varname]
。
下一个错误是您以向量为条件,dat$varname==val
将是布尔向量。
代码中的第三个错误是您正在命名函数子集,从而在基础包中覆盖了子集函数。因此,对 subset 的内部调用将是对您自己的函数的递归调用。要修复此问题,请重命名您的函数,或者您必须指定它是您使用 base::subset(dat, dat[varname]==val)
调用的基础包中的子集函数。
代码中的最后一个错误是您的函数没有 return 任何东西。不要将结果分配给变量数据,而是 return 它。
代码如下所示。
mySubset<-function(dat, varname, val)
if(any(dat[varname]==val)) {
subset(dat, dat[varname]==val)
} else {
NA
}
甚至更好
mySubset <- function(dat,varname,val) dat[dat[varname] == val]