这是我的第一篇文章,我对这一切都很陌生,所以我希望我做得对。 我的问题如下: 我写了一些R代码来从数据库中获取一些ID,然后用于酿造模板。 模板使用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一样。例如,我想将时间跨度从=“2010-01-01”传递到=“2012-01-01”
到maby使用这个
...
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.
@
...
但问题是,他不会离开thedate和todate成为像“2010-01-01”这样的字符串,总是把它变成2008年。
有没有办法告诉Code Chunks在设置之前不要对brew输入做任何事情,或者maby将参数从外部传递给chunk,这样它们就不必在chunk中设置了?
我希望你可以帮我解决这个问题,或者告诉我一个适当的方法。
答案 0 :(得分:0)
使用shQuote(&#34; string&#34;)-function可以解决问题。在这种情况下,这将保留日期和日期。例如:
from <- paste0("AND date(...) =>'",<%=shQuote(fromdate)%>,"'")
您可能需要根据您正在使用的操作系统调整类型。