我有一个现有的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)
)
答案 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