【发布时间】:2012-01-19 21:19:23
【问题描述】:
我基于subset()编写了以下函数,我觉得很方便:
ss <- function (x, subset, ...)
{
r <- eval(substitute(subset), data.frame(.=x), parent.frame())
if (!is.logical(r))
stop("'subset' must be logical")
x[r & !is.na(r)]
}
所以,我可以写:
ss(myDataFrame$MyVariableName, 500 < . & . < 1500)
而不是
myDataFrame$MyVariableName[ 500 < myDataFrame$MyVariableName
& myDataFrame$MyVariableName < 1500]
这似乎是其他人可能已经开发出解决方案的东西 - 包括我可能错过的核心 R 中的一些东西。已经有什么了吗?
【问题讨论】:
-
如果我们将
data.frame(.=x)更改为list(.=x),它似乎仍然有效,我怀疑性能会提高。 -
澄清一下——我只是用
myDataFrame$MyVariableName作为一个很长的向量名称的例子。我可能应该使用myVeryVeryVeryLongVariableName或其他东西,但如果我现在编辑它,@joran 的回答将没有多大意义。 =)