【问题标题】:passing a String from an R Script to .Rnw template R code section ,brew/knitr将字符串从 R 脚本传递到 .Rnw 模板 R 代码部分,brew/knitr
【发布时间】:2014-02-19 12:45:27
【问题描述】:

这是我第一次发帖,我对这一切都很陌生,所以我希望我做得对。 我的问题如下: 我编写了一些 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 输入做任何事情,或者可能将参数从外部传递到块,这样它们就不必在块中设置?

我希望你能帮我解决这个问题,或者告诉我一个正确的解决方法。

【问题讨论】:

    标签: r knitr r-brew


    【解决方案1】:

    这个问题可以通过使用 shQuote("string") 函数来解决。这将保留日期,在这种情况下,fromdate 和 todate 保持原样。示例:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      • 2016-07-22
      • 1970-01-01
      • 2018-04-09
      • 2020-03-24
      • 2017-05-15
      • 1970-01-01
      相关资源
      最近更新 更多