R Shiny - 在已编写的脚本中编辑数据表

时间:2018-01-10 20:47:23

标签: r shiny

我有一个现有的R脚本,它从我们公司的数据源获取数据并创建一个图表。数据放在一个长数据帧中,然后与另一个具有趋势因子的类似数据帧相乘,以创建低,中,高场景。然后绘制此数据框产品,以创建一个图表,显示随着时间的推移和未来几年的折旧。

我想使用R Shiny使这个趋势数据框可编辑,以便应用程序的外部用户可以调整他们想要的方案。关于如何最好地解决这个问题的任何建议?

以下是我正在使用的趋势因子的数据框(Tibble),如果这会有所帮助。 (我知道有更好的方法来创建这个数据帧,但我不确定如何。)

typefactors <- tibble(
  "Year" = c(year(today()), year(today()), year(today()),year(today()), year(today()), year(today()),
             year(today()) + 1, year(today()) + 1, year(today()) + 1, year(today()) + 1, year(today()) + 1, year(today()) + 1, 
             year(today()) + 2, year(today()) + 2, year(today()) + 2, year(today()) + 2, year(today()) + 2, year(today()) + 2, 
             year(today()) + 3, year(today()) + 3, year(today()) + 3, year(today()) + 3, year(today()) + 3, year(today()) + 3),
  "Projected" = c("Expected", "Expected", "High", "High", "Low", "Low",
                  "Expected", "Expected", "High", "High", "Low", "Low",
                  "Expected", "Expected", "High", "High", "Low", "Low",
                  "Expected", "Expected", "High", "High", "Low", "Low"),
  "Type" = c("Car", "Truck", "Car", "Truck","Car", "Truck",
             "Car", "Truck", "Car", "Truck","Car", "Truck",
             "Car", "Truck", "Car", "Truck","Car", "Truck",
             "Car", "Truck", "Car", "Truck","Car", "Truck"),
  "Exp" = c(
    #Current Year  Expected      High        Low 
    0.975,  0.96,   0.98,   0.98,   0.96,   0.92,
    #Year + 1      Expected      High        Low 
    0.96,   0.96,   1.01,   0.98,   0.94,   0.95,
    #Year + 2      Expected      High        Low 
    0.99,   0.98,   1.02,   1.00,   0.98,   0.97,
    #Year + 3      Expected      High        Low 
    1.00,   0.98,   1.03,   1.02,   1.00,   0.98)
)

1 个答案:

答案 0 :(得分:0)

是的,你可以(本身)这样做。但是你应该知道编辑数据并不完全是Shiny的强项。

您可以通过调用textInput来创建输入元素。您可以在textInput的{​​{1}}部分内拨打ui,也可以在致电shinyApp时动态调用insertUI。我建议从早些时候开始。无论如何,你需要为每个输入定义一个变量(textInput的第一个参数。在你编写的任何代码中,你可以访问这些变量。假设你现在有y0exp,{{ 1}},y0low等。

要进行更新,您可以通过单击“更新”按钮来监听文本输入的更改或(可能更简单的启动)。因此,在y1high的{​​{1}}部分内,您需要调用server来实际收听该点击。

现在你几乎就在那里:你需要将shinyApp和朋友转移到数据框中。在您的情况下,这可能类似于observeEvent(在您传递给y0exp的函数中)。最有可能的是,您还必须在点击事件处理程序中重新绘制任何图形。

我在这里要注意的是,有一个基本平坦的清单,其中前六个值是当前年份,接下来的六个值是下一年等,确实有点不幸。我考虑创建一个typefactors$Exp[2] <- y0exp(或者我可能已经在错误的col中),然后使用类似observeEvent的东西来绑定它。

除此之外,您可能会考虑坚持输入。如果我是用户,我每次打开应用程序时都讨厌更新12个以上的值。你可以做到这一切,你应该记住,你正在报名参加更多的工作,因为Shiny非常擅长呈现,而且只有平均编辑。

如果你想看一个完整的例子来说明这一点:几周前我就做了一些写作(包括Github Repo)。你可以在这里找到:https://sebastianrothbucher.github.io/datascience/r/visualization/shiny/couchdb/2017/10/14/test-drive-shiny-r-rstudio-couchdb.html和这里:https://github.com/sebastianrothbucher/ShinyCouch/blob/master/app.R