【问题标题】:reading excel files into Shiny将excel文件读入Shiny
【发布时间】:2015-11-27 09:34:55
【问题描述】:

我是 Shiny 的新手,正在尝试使用 Excel 文件中的数据运行应用程序。似乎它应该很简单,但无法弄清楚。有大量关于更复杂任务的信息(以交互方式上传文件,在其中指定列,文件位置等) - 但我想要的只是一个使用来自已在后台加载的单个 excel 文件的数据的应用程序。

之前有人问过类似的问题(Uploading csv file to shinyApps.ioR Shiny read csv file),但我没有从他们那里得到满意的答案。

我将我的 excel 文件保存在与 app.R 文件相同的目录中,名为“data”的文件夹中。然后我将它读入我脚本的server 部分,如下所示:

server <- function(input, output){
  # Read in data
  myDF <- read_excel('data/MyShinyData.xlsx')

当我运行 app.R 文件来测试应用程序时,它运行良好。但是当我使用 shinyapps::deployApp('pathToWorkingDirectory') 将它发布到 Shiny 网站时,我得到了一个没有交互性的灰色应用程序版本。如果我模拟 app.R 文件中的数据(excel 文件就是这个模拟数据,使用 write.xlsx 写入 excel),该应用程序也会很好地发布到网站 - 只有当我取出模拟数据的代码时并用它停止工作的 read_excel 命令替换它。我也尝试过使用 .csv 文件而不是 .xlsx,但同样的问题。

我已经从下面的 app.R 文件中复制了完整的代码。

我做错了什么?感谢您的帮助。

library('ggplot2')
library('shiny')
library('psych')
library('readxl')

#===============
#This code makes a histogram, a coplot, and a prediction for species richness ('SpNat') given Forest cover ('NBT').
#===============

m1 <- lm(SpNat ~ NBT, data=myDF) #For prediction. best to create all non-reactive [ie non-updating] code outside the app, so it doesn't have to run every time.

#==========
# ui section
#==========

ui <- fluidPage(

  ### MAKING A TITLE
  titlePanel("Dashboard based on excel data"),

  ### DIVIDING INPUTS TO SIDEBAR VS MAIN PANELS:
  sidebarLayout(

    sidebarPanel(                                                           #everything nested in here will go in sidebar
  #dropdown input for coplot:
  tags$h3('Select coplot variables'), #heading
  selectInput(inputId='choiceX', label='Choose X variable', 
              choices=c('Species richness'='SpNat', 'Forest cover'='NBT', 'Pest control'='PC')), #***Choices are concatenated text strings. 
  selectInput(inputId='choiceY', label='Choose Y variable', 
              choices=c('Species richness'='SpNat', 'Forest cover'='NBT', 'Pest control'='PC')),
  selectInput(inputId='choiceZ', label='Choose conditioning variable', 
              choices=c('Species richness'='SpNat', 'Forest cover'='NBT', 'Pest control'='PC')),
#checkbox input for pairs plots:
  tags$h3('Select variables for pairs plots'), #heading
  checkboxGroupInput(inputId='vars', label='Choose at least two variables for pairs plot', 
                   selected=c('SpNat', 'NBT', 'PC'), #'determines which vars start off checked. Important for pairs, cos <2 and plot wont work.
                   choices=c('Species richness'='SpNat', 'Forest cover'='NBT', 'Pest control'='PC')), #***Server receives input as a single concatenated text 

#slider input for prediction:  
  tags$h3('Predicting forest cover'), #heading
  sliderInput(inputId='num',label='Pick a forest cover level', value=10, min=1, max=100)),

  mainPanel(                                                               #everything nested in here will go in main panel
#specify output for app, including headings:
  tags$h3('Coplot:'),
  plotOutput(outputId='coplot'),
  tags$h3('Histogram:'),  
  plotOutput(outputId='pairs'),
  tags$h3('Predicted species richness:'),  
  verbatimTextOutput('prediction'))))

#==========
# server section
#==========

server <- function(input, output){
  # Read in data
  myDF <- read_excel('data/MyShinyData.xlsx') #don't need full path
  myDF$PC <-  as.factor(myDF$PC)
  myDF <- select(myDF, SpNat, NBT, PC)

  #create output object, and name it so it corresponds to the ui output function ID, plus use the ui input ID to create it: 
  output$coplot <- renderPlot(
    ggplot(myDF, aes_string(input$choiceX, input$choiceY, col=input$choiceZ)) + geom_point())    #note use of aes_string to allow inputID use direct.
  output$pairs <- renderPlot({
    pairs.panels(subset(myDF, select=input$vars))})
  output$prediction <- renderPrint({
    newData <- data.frame(NBT=input$num)
    cat(predict(m1, newdata = newData))
  })
}

#==========
# and stitch together
#==========

shinyApp(ui=ui, server=server)

【问题讨论】:

  • 您需要确保使用相对路径。
  • @MattO'Brien 谢谢。我想我已经在使用相对路径了?我的闪亮应用程序有这个路径C:/Users/new user/Documents/TESTShinyAppWithExcelData/app.R,我的数据有这个C:/Users/new user/Documents/TESTShinyAppWithExcelData/data/MyShinyData.xlsx,我用这个命令read_excel('data/MyShinyData.xlsx')从闪亮的应用程序中读取数据......那么这已经是一个正确的相对路径了吗?干杯

标签: r excel upload shiny


【解决方案1】:

想通了。我有两个问题:

(1) 我在发布之前已将应用复制到一个新文件夹中,因此工作目录已更改 - 需要在运行 shinyapps::deployApp 之前重置为包含我的 app.R 文件的文件夹。

(2) 我的应用程序需要的几个包会自动加载到我的 R 控制台中(我已经对我的 .Rprofile 文件进行了更改)。因此,虽然我不需要加载这些来在本地运行应用程序,但我确实将其发布到了网上。

这两个都是非常愚蠢的错误,但你生活和学习。

【讨论】:

    猜你喜欢
    • 2016-10-30
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2016-06-15
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多