這是我的第一篇文章,我對這一切都很陌生,所以我希望我這樣做是正確的。 我的問題如下: 我寫了一些R代碼從數據庫中獲取一些ID,然後用它們來創建模板。 該模板使用Knitr R然後在ID的周圍構建一些查詢以獲取用於實際報告的數據。從R腳本傳遞字符串到.Rnw模板R代碼部分,brew/knitr
腳本是這樣的:
...
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」
到莫比使用這個喜歡
...
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年
有沒有辦法告訴代碼大塊不要對釀造做任何事情在設置它之前輸入,或者將外部參數傳遞給塊,以便它們不必在塊中設置?
我希望你能幫我解決這個問題,或者告訴我一個適當的解決方法。