【发布时间】:2017-05-19 12:01:58
【问题描述】:
我已经使用 R 大约一年了,但我只用了几个星期就开始使用 Shiny。我有一些代码调用 API 并吐出一个很好的结果表,我想在 Shiny 应用程序中使用这些结果表 - 当单击操作按钮时调用 API。
这几天我一直在解决这个问题,但无法弄清楚,下面是我尝试过的一些事情。
- 如果我移除操作按钮,API 会在应用打开后立即调用并显示。
- 将 API 替换为简单文本会在单击按钮时显示文本。
- 在操作中呈现表格会导致 UI 想知道表格在哪里(作为未按下按钮)并给出错误。
API 包含敏感信息,所以我删除了一些细节,添加了一个典型的返回(它在访问 URL 时将 Json 返回到浏览器)。 关于我可能遗漏的任何想法?
API 返回
{"meta":{"request":{"granularity":"Monthly","main_domain_only":false,"format":null,"domain":"cnn.com","start_date":"2017-02-01","end_date":"2017-02-28","limit":null,"country":"world"},"status":"Success","last_updated":"2017-04-30"},"visits":[{"date":"2017-02-01","visits":100000`}]}
UI.r
library(shiny)
shinyUI(fluidPage(
headerPanel(actionButton("do", "Click Me")),
mainPanel(dataTableOutput("mytable"))
))
Server.r
library(shiny)
function(input, output) {
#Call API, flatten Json return
Visits_Final<- eventReactive(input$do, {
Results<- paste0("https://api.com/",
"site.com",
"apikey=***") %>%
map(fromJSON, flatten = FALSE)
#Transform into DF
visits_temp= data.frame(date=NA,visits=NA,ID=NA)
for(i in 1:1){
DF_L<- as.data.frame(Results[[i]]$visits)
ID <- (rep(i, nrow(DF_L)))
DF_L<- cbind(DF_L, ID)
Visits_Final<-rbind(visits_temp, DF_L)}})
#Output to UI
output$mytable <- renderDataTable({Visits_Final()})
}
提前致谢!
编辑
for(i in 1:i){
根据 BigDataScientist 的评论,改为
for(i in 1:1){
已添加代码 cmets
添加的系统信息: R 3.3.2 R Studio 版本 1.0.143 操作系统 Sierra 10_12_3
【问题讨论】:
-
for(i in 1:i){:这看起来很奇怪。应该是for(i in 1:length(Results)){吗? -
@BigDataScientist 正确,为了简单起见,我已经更改了它(上限是可变的,取决于 API 调用)。编辑为 1:1,这适用于本示例 - 好地方,谢谢。