这是我的第一篇文章,我对这一切都很陌生,所以我希望我做对了。我的问题如下:我编写了一些 R 代码来从数据库中获取一些 ID,然后将其用于 brew 模板。该模板使用 Knitr R 然后围绕 ID 构建一些查询以获取数据,然后用于实际报告。
脚本是这样的:
...
create.report() <- function(ID){
reportname <- "MyReport.Rnw"
brew('template.rnw',reportname)
knit(reportname)
....
}
带有 knitr 的 template.rnw 获取 brew 传递的 ID:
\section*{This is a Report for <%=ID%>}
<<loaddata, echo =FALSE>>=
query <- paste0("SELECT ... WHERE ID= ",<%=ID%>) # this gets us the Data for the report
data <- dbGetQuery(con,query) # Data from db is in Data now.
@
...
这对我来说效果很好。但现在我想将更多参数从脚本传递到模板,然后只是简单的输入,如 ID。例如,我想传递一个时间跨度,例如 from="2010-01-01" ,to="2012-01-01"
可以像这样使用
...
create.report() <- function(ID,fromdate,todate){
reportname <- "MyReport.Rnw"
brew('template.rnw',reportname)
knit(reportname)
....
}
.rnw 模板
<<loaddata, echo =FALSE>>=
from <- paste0("AND date(...) =>'",<%=fromdate%>,"'")
to <- paste0("AND date(...) =< '", <%=todate%>,"'")
query <- paste0("SELECT ... WHERE ID= ",<%=ID%>,from,to) # this gets us the Data
data <- dbGetQuery(con,query) # Data from db is in Data now.
@
...
但问题在于,他不会让 fromdate 和 todate 成为像“2010-01-01”这样的字符串,并且总是让它成为 2008 年。
有没有办法告诉代码块在设置之前不要对 brew 输入做任何事情,或者可能将参数从外部传递到块,这样它们就不必在块中设置?
我希望你能帮助我,或者告诉我一个正确的方法。