将一个字符串从R脚本传递给.Rnw模板R代码段,brew / knitr

时间:2014-02-19 12:45:27

标签: r knitr r-brew

这是我的第一篇文章,我对这一切都很陌生,所以我希望我做得对。 我的问题如下: 我写了一些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中设置了?

我希望你可以帮我解决这个问题,或者告诉我一个适当的方法。

1 个答案:

答案 0 :(得分:0)

使用shQuote(&#34; string&#34;)-function可以解决问题。在这种情况下,这将保留日期和日期。例如:

from <- paste0("AND date(...) =>'",<%=shQuote(fromdate)%>,"'")

您可能需要根据您正在使用的操作系统调整类型。