我创建了一个带有闪亮运行时的Rmarkdown文档。原因是根据某些选择,数据从数据库中获取,输出(表格和图表)相应地更新为新选择。对于我正在使用ggplot2的情节,这很好用,但是我想用rCharts引入更多的交互,这里是我被困的地方,尝试了使用renderPlot(),renderChart()和renderChart2的各种组合()返回rCharts对象p,使用p $ show()或p $ print()使用不同的参数,没有任何选项适合我。 这些是我使用的代码示例。 部首:
---
title: "my title"
runtime: shiny
output:
html_document
ext_widgets: {rCharts: [libraries/nvd3]}
---
这是绘图代码
```{r, echo=FALSE, comment = NA, results = "asis", comment = NA, tidy = F}
renderPlot({
data.dt <- data.table(analysisData())
aggdata2 <- as.data.frame(data.dt[, lapply(.SD, sum), by = date])
aggdata2 <- aggdata2[with(aggdata2,order(date)),]
p <- nPlot(y ~ date, data = aggdata2, type = "lineChart", width = 600)
p$xAxis(
tickFormat = "#!
function(d) {return d3.time.format('%Y-%m-%d')(new Date(d*1000*3600*24));}
!#"
)
#p$print()
#p$show('iframesrc', cdn =TRUE, include_assets=TRUE)
return(p)
})
```
这确实是我到目前为止找到的最佳解决方案:它正在打开一个新窗口,其中包含我想要创建的图表。但是,它在markdown html中留下了一个空白区域,我想要图表。
对于analysisData()函数,这里是一个简化的代码
```{r, echo=FALSE}
analysisData <- reactive({
variable1 = input$variable1
variable2 = input$variable2
tables = "sqlTable"
drv <- dbDriver("PostgreSQL")
dbname <- "dbname"; dbuser <- "dbuser";
dbport = dbport
dbhost <- "dbhost.com";
con <- dbConnect(drv, host=dbhost, port = dbport, dbname=dbname, user=dbuser)
selectStatement = "select * from %s where variable1=%s and variable2=%s"
query = sprintf(selectStatement, tables, variable1, variable2)
dataset <- dbGetQuery(con,query)
lapply(dbListConnections(drv),dbDisconnect)
dbUnloadDriver(drv)
dataset$date <- as.Date(dataset$date)
dataset
})
```
您对如何解决问题有什么建议吗?任何提示都表示赞赏。