在Stackoverflow的精彩人士的帮助下,我设法建立了一个闪亮的网络应用程序(感谢闪亮的服务器开发人员),让我选择要使用的数据集,并绘制一个显示完整数据集的漂亮表格。现在,我希望用户输入日期范围,然后通过按提交按钮显示该范围内的数据表。
提交请求时会显示错误消息:
DataTables warning(table id ='DataTables_Table_0'):DataTables 警告:无法解析来自服务器的JSON数据。这是由 一个JSON格式错误。
我认为这不是R错误。我发现了一些有关JSON googleing的信息,但它与之相关 Javascript,我不知道如何管理。我正在使用Firefox来测试应用程序。
请在此处找到我用于 ui.R
的代码library(shiny)
shinyUI(pageWithSidebar(
# Título superior
headerPanel(""),
# Panel lateral izquierdo - selección de datos
sidebarPanel(
selectInput("torre", "Torre:",
list("Place 1" = "place1",
"Place 2" = "place2")),
selectInput("tipo", "Intervalo de datos",
list("Daily" = "-daily.csv",
"Monthly" = "-monthly.csv")),
textInput("date1", "Fecha inicial:", "2000-01-01"),
textInput("date2", "Fecha final:", "2000-01-01"),
submitButton("Update View")
),
# Panel principal (presentación de gráficas)
mainPanel(
tabsetPanel(
tabPanel("Inicio",
h3("Consulta de datos"),
p(HTML("En el panel <i>Ayuda</i> se describen las variables
presentadas en la tabla de datos.")),
tableOutput("view")
),
tabPanel("Ayuda", htmlOutput("ayuda"),id="ayuda"),
tabPanel('Tabla de datos', dataTableOutput("mytable3"))
)
)
))
和 server.R
library(shiny)
library(plyr)
library(lubridate)
library(scales)
options(shiny.transcode.json = FALSE)
# Funciones
shinyServer(function(input,output){
filename=reactive({
paste0(input$torre,input$tipo)
})
day1=reactive({
paste0(input$date1," 00:00:00")
})
day2=reactive({
paste0(input$date2," 23:50:00")
})
# Lectura de datos
datos2=reactive({
read.csv(filename(),header=T, sep=",",na.strings="-99.9")
})
datos=reactive({
d1 <- as.POSIXct(day1())
d2 <- as.POSIXct(day2())
with( datos2() , datos2()[ date >= d1 & date <= d2, ] )
})
# Tabla de datos
output$mytable3 = renderDataTable({
datos()
}, options = list(aLengthMenu = c(10, 25, 50), iDisplayLength = 10))
})
感谢您的帮助
EDIT1
还在server.R
中尝试了这段代码 datos=reactive(function(){
subset(datos2(),datos2()$date >= day1())
subset(datos2(),datos2()$date <= day2())
})
和一些变体如
datos=reactive(function(){
subset(datos2(),date >= input$date1)
subset(datos2(),date <= input$date2)
})
没有成功。在这两种情况下,数据表显示整个数据集,它似乎在更改输入日期后运行,但子集不会生效。
编辑2
数据重新上载,因为ubuntu一个链接被破坏了。请检查标题和格式的数据,因为原始数据已丢失,可能还有一些更改。
找到数据答案 0 :(得分:3)
在您上传的文件中,只有place2-daily.csv
有效。 place1-daily
标题已损坏(请使用记事本查看),并且每月根据您的子集要求没有day
列。
所以让我们修复文件名:
datos2=reactive({
#fn = filename()
fn = "place2-daily.csv"
f = read.csv(fn,header=T, sep=",",na.strings="-99.9")
f$date = as.Date(f$date)
f
})
datos=reactive({
d1 <- as.Date(day1())
d2 <- as.Date(day2())
datos2a = datos2()
with( datos2a , datos2a[ date >= d1 & date <= d2, ] )
})
您date
作为一个因素被读入,因此您必须先将其转换。在datos
部分,我建议分配一个局部变量。我的经验法则是每当多次调用()时总是分配。