R有光泽:我可以在另一个输出中使用一个变量吗?

时间:2015-12-24 12:17:22

标签: r server shiny

大家 对于R闪亮,我是全新的。这是我的问题:

以下是服务器中的两部分编码。

 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,我想在输出$ summary中进行总结。但是,我不能在输出$ summary中使用datatable。我还尝试在第一个开头定义一个data.frame,就像&lt; - data.frame一样。然后我喜欢&lt; -datatable。还是行不通。 你能帮帮我吗?非常感谢。

2 个答案:

答案 0 :(得分:3)

是的,您可以在多个输出中使用变量,我们只需稍微调整您的代码。首先要知道的是,就像在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。

答案 1 :(得分:0)

您可以使用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) 
    })