R 闪亮,未找到对象 'input'
R Shiny, Object 'input' not found
我收到错误:..stacktraceon..({ : object 'input' not found。如果 api key/url 的格式没有输入。我认为错误在第 25 行和第 27 行,其中输入 $api 键被切换,或者闪亮的应用程序没有开始的值。
这个应用程序的目标是获取用户输入的 api 键,并用 timevis 很好地显示它作为一个时间表。我尝试将 api 调用和数据清理放在服务器功能下方,但这不起作用。感谢您的帮助。
library(shiny)
library(httr)
library(jsonlite)
library(lubridate)
library(tools)
library(timevis)
# Define UI for application
ui <- fluidPage(
# Application title
titlePanel("User Schedule"),
# Input API INFo
textInput(inputId = "apikey1", label = h3("API Key"), value = "enterkey"),
textInput(inputId = "userkey1", label = h3("USER EMAIL"), value = "enteremail"),
submitButton("Update View", icon("refresh")),
hr(),
timevisOutput("timeline"))
#Make API call and prepare Timeline information
options(stringsAsFactors = FALSE)
apikey2 <- input$apikey1
userkey2 <- input$userkey1
master_url <- sprintf("https://%s?api_key= %s",userkey2,apikey2)
my_url <- master_url
my_raw_result <- httr::GET(my_url)
my_raw_result
my_raw_result_text <- content(my_raw_result, "text")
my_raw_result_json <- fromJSON(my_raw_result_text, flatten = TRUE)
my_raw_result_df <- as.data.frame(my_raw_result_json)
dt <- my_raw_result_df
dt[dt==""] <- NA # Replace all blank to NA
dt$start <- as.Date(as.character(dt$Schedule.item.date, 1,10)) # reformat the date field to my preferred format
dt$end <- NA
dt$content <- as.character(dt$schedule.item.type) # formate the content as text characters
# Define server logic required to draw time line
server <- function(input, output) {
output$timeline <- renderTimevis({timevis(dt)})
}
# Run the application
shinyApp(ui = ui, server = server)
正如@r2evans 所说,您创建 dt
的代码在 server
函数之外,因此它在全局环境中。那里不存在变量 input
。因此,将 options(stringsAsFactors = FALSE)
到 dt$content <- as.character(dt$schedule.item.type)
的代码放在 server
函数中。这将使您可以访问 input
。
这回答了您的问题,但您还有更多工作要做:
input
只能在活动上下文中访问,因此您将拥有
将您的初始化代码包装在 observe({})
或类似的 中
- 您需要防止
renderTimevis()
输入错误。类似于:
output$timeline <- renderTimevis({
req(input$apikey1, input$userkey1)
if (is.data.frame(dt)) timevis(dt)
})
- 您可以考虑使用
placeholder=
而不是 value=
textInput
s 为您的用户提供初步指导。
- 你需要
修改您的初始化代码以防止启动时出错
到缺失值。类似于:
observe({
req(input$apikey1, input$userkey2)
<... your initialisation code ...>
})
至少可以显示您的应用程序的 GUI。
我收到错误:..stacktraceon..({ : object 'input' not found。如果 api key/url 的格式没有输入。我认为错误在第 25 行和第 27 行,其中输入 $api 键被切换,或者闪亮的应用程序没有开始的值。
这个应用程序的目标是获取用户输入的 api 键,并用 timevis 很好地显示它作为一个时间表。我尝试将 api 调用和数据清理放在服务器功能下方,但这不起作用。感谢您的帮助。
library(shiny)
library(httr)
library(jsonlite)
library(lubridate)
library(tools)
library(timevis)
# Define UI for application
ui <- fluidPage(
# Application title
titlePanel("User Schedule"),
# Input API INFo
textInput(inputId = "apikey1", label = h3("API Key"), value = "enterkey"),
textInput(inputId = "userkey1", label = h3("USER EMAIL"), value = "enteremail"),
submitButton("Update View", icon("refresh")),
hr(),
timevisOutput("timeline"))
#Make API call and prepare Timeline information
options(stringsAsFactors = FALSE)
apikey2 <- input$apikey1
userkey2 <- input$userkey1
master_url <- sprintf("https://%s?api_key= %s",userkey2,apikey2)
my_url <- master_url
my_raw_result <- httr::GET(my_url)
my_raw_result
my_raw_result_text <- content(my_raw_result, "text")
my_raw_result_json <- fromJSON(my_raw_result_text, flatten = TRUE)
my_raw_result_df <- as.data.frame(my_raw_result_json)
dt <- my_raw_result_df
dt[dt==""] <- NA # Replace all blank to NA
dt$start <- as.Date(as.character(dt$Schedule.item.date, 1,10)) # reformat the date field to my preferred format
dt$end <- NA
dt$content <- as.character(dt$schedule.item.type) # formate the content as text characters
# Define server logic required to draw time line
server <- function(input, output) {
output$timeline <- renderTimevis({timevis(dt)})
}
# Run the application
shinyApp(ui = ui, server = server)
正如@r2evans 所说,您创建 dt
的代码在 server
函数之外,因此它在全局环境中。那里不存在变量 input
。因此,将 options(stringsAsFactors = FALSE)
到 dt$content <- as.character(dt$schedule.item.type)
的代码放在 server
函数中。这将使您可以访问 input
。
这回答了您的问题,但您还有更多工作要做:
input
只能在活动上下文中访问,因此您将拥有 将您的初始化代码包装在observe({})
或类似的 中
- 您需要防止
renderTimevis()
输入错误。类似于:
output$timeline <- renderTimevis({
req(input$apikey1, input$userkey1)
if (is.data.frame(dt)) timevis(dt)
})
- 您可以考虑使用
placeholder=
而不是value=
textInput
s 为您的用户提供初步指导。 - 你需要 修改您的初始化代码以防止启动时出错 到缺失值。类似于:
observe({
req(input$apikey1, input$userkey2)
<... your initialisation code ...>
})
至少可以显示您的应用程序的 GUI。