Все, я новичок в R shiny. Вот мой вопрос:

Ниже приведены две части кодирования на сервере.

 output$contents <- renderDataTable({
    inFile <- input$file1
    if (is.null(inFile))
    return(NULL)
    datatable <- read.csv(inFile$datapath, header=input$header,     sep=input$sep, quote=input$quote)
    datatable
    }, options = list(orderClasses = TRUE))


    output$summary <- renderPrint({
    summary(datatable(),20)
    aaa <- "afefagfaegar"
    list(summary(data(),20),aaa) 
    })

Datatable - это data.frame, который я хочу резюмировать в output $ summary. Однако я не могу использовать datatable в output $ summary. Я также пытаюсь определить data.frame в самом начале как <- data.frame. Тогда мне нравится <-datatable. Все еще не работает. Не могли бы вы помочь мне здесь? Большое спасибо.

1
Feng Chen 24 Дек 2015 в 15:17

2 ответа

Лучший ответ

Да, вы можете использовать переменную более чем в одном выводе, нам просто нужно немного подправить ваш код. Первое, что нужно знать, это то, что, как и в R, переменные, созданные внутри функции, находятся в другой области видимости, чем те, которые созданы вне функции. Итак, в вашем случае вы создали datatable внутри output$contents, поэтому в настоящее время его нельзя использовать. Итак, давайте создадим datatable вне этой функции, а затем передадим его нашим функциям.

datatable <- reactive({
  if (is.null(input$file1)) return(NULL)
  inFile <- input$file1
  dat <- read.csv(inFile$datapath, header=input$header, sep=input$sep, quote=input$quote)
  return(dat)
})

output$summary <- renderPrint({
  if (is.null(datatable())) return(NULL)
  summary(datatable(),20)
  aaa <- "afefagfaegar"
  list(summary(data(),20),aaa) 
})

output$contents <- renderDataTable({
  if (is.null(datatable)) return(NULL)
  dat <- datatable(datatable())
  dat
}, options = list(orderClasses = TRUE))

Определив datatable вне других функций, мы теперь можем передать его обеим функциям. Нам просто нужно убедиться, что мы проверили, что datatable не NULL, прежде чем пытаться его использовать.

3
brittenb 24 Дек 2015 в 12:29

Вы можете использовать eventReactive

Например

datatab=eventReactive(input$file1,{
inFile <- input$file1
if (is.null(inFile))
    return(NULL)
    datatable <- read.csv(inFile$datapath, header=input$header,     sep=input$sep, quote=input$quote)
return(datatable)
})


output$contents <- renderDataTable({
   datatab()
    }, options = list(orderClasses = TRUE))


    output$summary <- renderPrint({
    summary(datatab(),20)
    aaa <- "afefagfaegar"
    list(summary(datatab(),20),aaa) 
    })
0
Batanichek 24 Дек 2015 в 12:48