【问题标题】:shiny fileinput r dataframe闪亮的fileinput r数据框
【发布时间】:2015-12-20 23:07:53
【问题描述】:

使用 R shiny,我正在开发一个简单的应用程序,允许用户从文件中输入数据。使用 csv 或 txt 文件一切正常,但我无法加载 R 数据帧。

## SERVER.R
shinyServer(function(input, output) {
 infile <- reactive({
 infile <- input$datafile
 if (is.null(infile)) {
  # User has not uploaded a file yet
  return(NULL)
 }
 infile<load(input$datafile$datapath) 
 })

 myData <- reactive({
   df<-infile()
   if (is.null(df)) return(NULL)
 })
 output$value1 <- renderPrint({
   names(iris)
 })
 output$value2 <- renderPrint({
   names(myData())
 })
  load("iris.Rdata")   ## data loaded for testing 
})

## UI.R
shinyUI(fluidPage(
  fileInput("datafile", label = h3("File input")),
  fluidRow(column(4, verbatimTextOutput("value1"))),
  fluidRow(column(4, verbatimTextOutput("value2")))
))

当我运行这个应用程序时,我可以看到仅为测试加载的 iris 数据集的名称,但加载文件的名称(应呈现为 value2)仅显示“NULL”

有什么帮助吗??提前致谢!

【问题讨论】:

  • “当我运行这个应用程序时,我可以看到仅为测试加载的 iris 数据集的名称”你为什么这么说?除了 load("iris.Rdata") 应该在 shinyServer(function(input, output) {} 之外
  • 为了测试应用程序是否运行良好,除了文件输入负载之外,我还加载了 IRIS 数据框,并显示了“名称”。我对文件输入做了同样的事情,但没有奏效。可能不是常规方式,但我不是程序员,所以这是我发现对自己有用的方式

标签: r shiny


【解决方案1】:

我想这就是你想要的。你有几个错别字,你可能不太明白 load 究竟做了什么,它将一组对象加载到内存中。

我做了以下事情:

  • 添加了一些初始化代码来保存几个 .Rdata 用于测试,它们都只有一个对象,一个数据框。代码需要这个。
  • 添加一行来解析加载的数据文件中的第一个对象并返回它

代码如下:

server.r

## SERVER.R

#Initialization
library(datasets)
save(iris,file="iris.Rdata")
save(mtcars,file="m.Rdata")

shinyServer(function(input, output) {
  infile <- reactive({
    infile <- input$datafile
    if (is.null(infile)) {
      # User has not uploaded a file yet
      return(NULL)
    }
    objectsLoaded <- load(input$datafile$name) 
    # the above returns a char vector with names of objects loaded
    df <- eval(parse(text=objectsLoaded[1])) 
    # the above finds the first object and returns it
    return(df)
  })

  myData <- reactive({
    df<-infile()
    if (is.null(df)) return(NULL)
    return(df)
  })
  output$value1 <- renderPrint({
    names(iris)
  })
  output$value2 <- renderPrint({
    names(myData())
  })
  load("iris.Rdata")   ## data loaded for testing 
})

ui.r

## UI.R
shinyUI(fluidPage(
  fileInput("datafile", label = h3("File input")),
  fluidRow(column(4, verbatimTextOutput("value1"))),
  fluidRow(column(4, verbatimTextOutput("value2")))
))

这是输出:

【讨论】:

  • 迈克,你所做的正是我想要的。 但是,它对我不起作用。我完全复制代码并运行它,但仍然看不到第二个 df(汽车)的名称。它显示为 NULL。我正在使用 R 3.2.2。闪亮的 0.12.2。知道可能出了什么问题吗?
  • 先尝试清除会话工作区。并删除您目录中的所有*.Rdata
  • 我得到它的工作。我将 infile 重命名为 df 并且工作正常!非常感谢!
  • 你能说得更清楚些吗? “为df重命名infile”我不清楚。你重命名了 `infile' 函数?
  • 啊,我发现一个错字。奇怪的是它是如何潜入的......我在myData 函数中添加了一个return(df) - 不知何故,当我复制它时它被删除了。
猜你喜欢
  • 2015-03-17
  • 2021-06-21
  • 1970-01-01
  • 2014-05-06
  • 2018-09-26
  • 2017-11-15
  • 2013-12-22
  • 2016-04-09
  • 2017-09-10
相关资源
最近更新 更多