我已经根据 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中的内容 . 那里有什么东西吗?
2 回答
我意识到Ken提供的解决方案比仅选择范围内的项目更通用(因为它应该适用于任何逻辑表达式)但这确实提醒我Greg Snow在他的Teaching Demos包中有比较中缀运算符:
谢谢分享肯 .
你可以使用:
您可能需要更少的输入,但如果您共享代码,则代码不太通用 . 我有一些节省时间的功能,但我们谨慎使用它们,因为它们可能会减慢您的代码速度(额外的步骤),并且当您与其他人共享文件时,还需要包含该功能的代码 .
Compare writing length. Almost the same length:
Compare time on 1000 replications.
所以我想这取决于你是否需要速度和/或稳定性与方便性 . 如果它仅适用于小型数据集,我会说它很有 Value .
EDIT: NEW BENCHMARKING