如何改进 R 中数据库的 "seeker"? (见代码)

How to improve a "seeker" for databases in R? (See code)

最近我找到了使用 R 为数据库创建简单 "seeker" 的方法。 例如:

data(mtcars)
mtcars <- split(mtcars, list(mtcars$cyl, mtcars$hp))

让我们找到 8 缸和 245 马力的汽车并获得频率:

mtcars$"8.245"
nrow(mtcars$"8.245")

这仅适用于完全巧合的情况。例如:

>mtcars$"4.100"
NULL

所以问题是:如何改进 "seeker" 以包含 >=、<=?

等运算符

我的意思是,例如,查找具有小于或等于 100 hp 的 4 个气缸的所有观测值

mtcars$"4.<=100" # This code obviously doesn't work it's just for show what I do want to achieve

任何建议将不胜感激。

完全不知道你为什么要这样做,但你可以使用 evalparse 创建你自己的函数来做到这一点。

`%$%` <- function(df, seeker, cols=c("cyl","hp")) {
    strparts <- strsplit(seeker, "\.")[[1]]
    sk <- ifelse(grepl("^[1-9]", strparts), paste0("==", strparts), strparts)
    s <- paste(paste0("df$", cols, sk), collapse="&")
    ans <- df[eval(parse(text=s)),]
    split(ans, ans[,cols])
} 

示例用法 1:

mtcars %$% "8.245"
# $`8.245`
#        mpg cyl disp  hp drat   wt  qsec vs am gear carb
# Duster 360 14.3   8  360 245 3.21 3.57 15.84  0  0    3    4
# Camaro Z28 13.3   8  350 245 3.73 3.84 15.41  0  0    3    4

示例用法 2:

mtcars %$% "4.<=100"
# $`4.52`
#              mpg cyl disp hp drat    wt  qsec vs am gear carb
# Honda Civic 30.4   4 75.7 52 4.93 1.615 18.52  1  1    4    2
# 
# $`4.62`
#            mpg cyl  disp hp drat   wt qsec vs am gear carb
# Merc 240D 24.4   4 146.7 62 3.69 3.19   20  1  0    4    2
# 
# $`4.65`
#                 mpg cyl disp hp drat    wt qsec vs am gear carb
# Toyota Corolla 33.9   4 71.1 65 4.22 1.835 19.9  1  1    4    1
# 
# $`4.66`
#            mpg cyl disp hp drat    wt  qsec vs am gear carb
# Fiat 128  32.4   4 78.7 66 4.08 2.200 19.47  1  1    4    1
# Fiat X1-9 27.3   4 79.0 66 4.08 1.935 18.90  1  1    4    1
# 
# $`4.91`
#               mpg cyl  disp hp drat   wt qsec vs am gear carb
# Porsche 914-2  26   4 120.3 91 4.43 2.14 16.7  0  1    5    2
# 
# $`4.93`
#             mpg cyl disp hp drat   wt  qsec vs am gear carb
# Datsun 710 22.8   4  108 93 3.85 2.32 18.61  1  1    4    1
# 
# $`4.95`
#           mpg cyl  disp hp drat   wt qsec vs am gear carb
# Merc 230 22.8   4 140.8 95 3.92 3.15 22.9  1  0    4    2
# 
# $`4.97`
#                mpg cyl  disp hp drat    wt  qsec vs am gear carb
# Toyota Corona 21.5   4 120.1 97  3.7 2.465 20.01  1  0    3    1#