R Shiny读取csv文件

6
如果可以的话,我有一个关于使用Shiny读取csv文件的问题需要询问。
我花了很多时间搜索和阅读文档...如果我漏掉了什么,请谅解。大多数答案似乎都太花哨了,在选择数据文件时需要用户交互。我只是想让R Shiny在没有任何用户交互的情况下读取一个数据文件(仅限一个)。
我有标准的ui.R和server.R文件,并将它们放在一个工作目录中。
我有一个包含数据的csv文件,我将其放在名为“data”的子目录中(基于此处的教程:http://shiny.rstudio.com/tutorial/lesson5/)。
从R Studio内部,我手动将工作目录设置为ui.R和server.R文件所在的目录。 我加载shiny并运行runApp()。 在server.R的一行脚本中,尝试使用read.csv将数据读入对象'd.in'。
这并没有起作用,所以我尝试在读取csv文件之前强制更改工作目录,然后在读取数据之后并在shinyServer代码之前重新设置它。
代码片段:
wd.datapath = paste0(getwd(),"/data")
wd.init = getwd()
setwd(wd.datapath)

d.in = read.csv("shinyDataITB.csv", header = TRUE)

setwd(wd.init)

我收到了一个错误信息:“ERROR: object 'd.in' not found”
如果在运行runApp之前手动加载csv数据文件,则其他所有内容似乎都能正常工作。我不确定自己搞砸了哪些事情,但希望得到任何帮助。 ui.R文件
##### ui.R #####

library(shiny)

shinyUI(pageWithSidebar(

  headerPanel("Supply ITB"), 

  sidebarPanel( 

    radioButtons(inputId = "in.facnum",
                 label = "Choose Facility",
                 choices = levels(d.in$facnum)) 
    ),  # end sidebarPanel

  mainPanel(
    h3("SPC chart"), 
    plotOutput("plotDisplay")
    )   # end mainPanel

  ))    # end Sidebar

还有server.R文件

##### server.R #####

# load packages -------------------------------------------------------------

library(shiny)
library(qcc)

# load the data -------------------------------------------------------------


wd.datapath = paste0(getwd(),"/data")
wd.init = getwd()
setwd(wd.datapath)

#d.in = read.csv(file.choose(), header = TRUE)

d.in = read.csv("shinyDataITB.csv", header = TRUE)

setwd(wd.init)


# add proportions related to fill_lines -------------------------------------

d.in$whprop = d.in$wh / d.in$volume
d.in$dmprop = d.in$dm / d.in$volume
d.in$mmprop = d.in$mm / d.in$volume


# select SPC response variable (using proportions) --------------------------

qccvar = "whprop"


# shiny server body ---------------------------------------------------------

shinyServer(function(input,output) { 


# Individuals (X) chart -----------------------------------------------------

  output$plotDisplay <- renderPlot({

    # select subset for specific facility

    d.strata = subset(d.in, d.in$facnum == input$in.facnum)  # subset

    d.strata = d.strata[order(d.strata$year, d.strata$monthnum, 
                              decreasing = FALSE),]  # order by month

    # create SPC chart

    x.chart = qcc( d.strata[,qccvar], type = "xbar.one", 
               title = paste("Individuals chart\n", input$in.facnum, qccvar) )


  })  # end renderPlot

})    # end shinyServer


### END CODE ###

我已经把数据文件放在这个Dropbox文件夹中 shinyDataITB.csv

2个回答

4

另一种可行的方法是通过server.R构建单选按钮:

output$ui <- renderUI({sidebarPanel( 

radioButtons(inputId = "in.facnum",
             label = "Choose Facility",
             choices = levels(d.in$facnum)) 
),  # end sidebarPanel

通过ui.R:

uiOutput("ui")),

你好 user3819568。我已经成功让它工作了。我发现我需要添加 '})',但是我已经解决了这个问题。非常感谢你的帮助。 - crlong
那是我笨拙了。对此感到抱歉,很高兴能够提供帮助。 - user3819568

1
你的问题在于 ui.R 文件中。你引用了 d.in$facnum,但是在 UI 中并没有定义 d.in,它只存在于 server.R 文件中。变量不能像那样在两个实例之间共享。服务器和 UI 需要通过输入和输出参数进行通信。
如果你想从服务器上的数据设置单选按钮的选项值,可以使用 updateRadioButtons。首先,请确保在 shinyServer 函数中包含 session 参数。
shinyServer(function(input,output, session) { 
    ...
    updateRadioButtons(session, "in.facnum", choices=levels(d.in$facnum))
    ...
}

然后,这将设置该输入框中的值。

嗨MrFlick。回顾这个春天我提出的第一个问题,我认为您也表达了同样的观点,这可能是我在重复错误。不好意思。如果我还没有“get到”,我觉得我离答案更近了一步。非常感谢。关于上面的建议,我尝试了一下,但ui.R代码似乎还有些错乱。我会再探索一下。再次感谢您抽出时间来帮助我。 - crlong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接