R中的“宏变量”

时间:2017-05-02 11:27:14

标签: r

我正在尝试构建一个接受用户输入参数的进程,然后相应地生成内容。

我需要能够:

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识别这个值?

1 个答案:

答案 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