我正在尝试构建一个接受用户输入参数的进程,然后相应地生成内容。
我需要能够:
1. Input a variable
2. Pull max date for that variable
3. Pull all data less than or equal to that date
dates <- c('2001-01-08', '2015-01-07', '2013-03-03', '2001-01-01', '2013-07-25', '2000-09-20', '2017-02-20')
groups <- c('A', 'A', 'A', 'B', 'B', 'C', 'D')
dat <- data.frame(groups, dates)
dat$dates <- as.Date(dat$dates)
以下内容适用于我想要做的事情....
querydate <- sqldf(
"SELECT max(dates) as x
FROM dat
WHERE groups == 'A'")
但是我想编辑它来做这样的事情....我指定一个值和查询引用......
group_i_want <- 'A'
querydate <- sqldf(
"SELECT max(dates) as x
FROM dat
WHERE groups == group_i_want")
如何让R识别这个值?
答案 0 :(得分:1)
您可以考虑使用sprintf
对在运行时收集的值进行字符串格式化。例如:
g <- "A"
if (invalid.input(g)) stop("Error") # Make sure input was valid
query <- sprintf("SELECT max(dates) as x FROM dat WHERE groups == '%s'", g)
querydate <- sqldf(query)
此处%s
将替换为g
中包含的字符串。您也可以使用特定格式替换数字,有关详细信息,请查看?sprintf
。