【问题标题】:Structure Server Function in a Shiny App在闪亮的应用程序中构建服务器功能
【发布时间】:2018-07-29 17:23:11
【问题描述】:

我正在为我的第一个闪亮的应用程序而苦苦挣扎,并且由于我认为我在服务器功能中遗漏了一些东西而遇到了问题。

我有一个 R 脚本,它有两个变量(闪亮的两个反应值),它创建一个图(一个直方图)和一个包含两列(时间和毫米)的 csv 文件。

library(ggplot2)
**Pdmm** <- 125                 # numeric input in shiny
**IndiceTorrencial** <- 10      # slider between 8 and 12 in shiny 
DuracionAgua <- 24
IntervaloMin <- 60
IntervaloTiempo <- IntervaloMin/60
Intervalos <- DuracionAgua/IntervaloTiempo
t <- seq(1,Intervalos,IntervaloTiempo)
DF <- data.frame(t)
DF$I <- (**Pdmm**/24)*(**IndiceTorrencial**)^(((28^0.1)-(DF$t^0.1))/((28^0.1)-1)) # equation where the reactive values are running
DF$Pacu <- DF$t*DF$I
DF$Pmm <- c(DF$Pacu[1], diff(DF$Pacu, lag = 1))
DF$mm <- c(DF$Pmm[23],DF$Pmm[21],DF$Pmm[19],DF$Pmm[17], DF$Pmm[15],DF$Pmm[13],DF$Pmm[11],DF$Pmm[9],DF$Pmm[7],DF$Pmm[5],DF$Pmm[3],DF$Pmm[1],DF$Pmm[2],DF$Pmm[4],DF$Pmm[6],DF$Pmm[8],DF$Pmm[10],DF$Pmm[12],DF$Pmm[14],DF$Pmm[16],DF$Pmm[18],DF$Pmm[20],DF$Pmm[22],DF$Pmm[24])
ggplot(DF,aes(x=t,y=mm)) + geom_bar(stat = "identity",fill = "dodgerblue",color = "black") + scale_x_continuous(name = "t(h)", breaks = seq(1,24,1)) + scale_y_continuous(name = "mm")

我的闪亮应用在其 UI 中具有一个滑块、一个数字输入和一个绘图。它有效,我将有时间做一些更好的事情。

ui <- basicPage(
  sliderInput(inputId = "coefTo",
              label = h3("Torrentiality Coefficient"),
              value = 10, min = 8, max = 12),
  numericInput(inputId = "PmmS",
               label = h3("Areal Precipitation"),
               value = 100),
  imageOutput("plot")
)

问题出在服务器功能上。我想我确信我必须使用反应函数来执行代码并产生结果(直方图和 csv)。另外,为了绘制直方图,我有一个 renderPlot。

server <- function(input, output, session){

  data <- reactive({
    DuracionAgua <- 24
    IntervaloMin <- 60
    IntervaloTiempo <- IntervaloMin/60
    Intervalos <- DuracionAgua/IntervaloTiempo
    t <- seq(1,Intervalos,IntervaloTiempo)
    DF <- data.frame(t) 
    DF$I <- (input$PmmS/24)*(input$coefTo)^(((28^0.1)-(DF$t^0.1))/((28^0.1)-1))
    DF$Pacu <- DF$t*DF$I
    DF$Pmm <- c(DF$Pacu[1], diff(DF$Pacu, lag = 1))
    DF$mm <- c(DF$Pmm[23],DF$Pmm[21],DF$Pmm[19],DF$Pmm[17], DF$Pmm[15],DF$Pmm[13],DF$Pmm[11],DF$Pmm[9],DF$Pmm[7],DF$Pmm[5],DF$Pmm[3],DF$Pmm[1],DF$Pmm[2],DF$Pmm[4],DF$Pmm[6],DF$Pmm[8],DF$Pmm[10],DF$Pmm[12],DF$Pmm[14],DF$Pmm[16],DF$Pmm[18],DF$Pmm[20],DF$Pmm[22],DF$Pmm[24])
    DFm <- DF$mm

    return(DFm)

  })

  output$plot <- renderPlot({
    ggplot(data(DFm),aes(x=t,y=mm)) + geom_bar(stat = "identity",fill = "dodgerblue",color = "black") + scale_x_continuous(name = "t(h)", breaks = seq(1,24,1)) + scale_y_continuous(name = "mm")
  })

}

当我运行这个脚本时,我得到了闪亮的应用程序,我有滑块和数字输入,但没有得到一条错误消息,指出 Error: unused argument (DFm). DFm 没有创建,所以我假设我放错了代码来自闪亮应用程序中的原始脚本,但我不知道该怎么做。

我已经尝试了几种方法来使服务器正常工作,但我认为脚本永远不会在闪亮的应用程序中运行。我尝试创建两个反应函数,每个反应值一个。我试图将原始脚本中的所有代码都从闪亮的代码中取出,只留下闪亮代码中的反应值......我也尝试了观察函数。 我遇到的另一个问题是我不确定渲染图。我知道我必须调用响应函数 data,但我不确定它是否制作精良。 我认为我的服务器功能完全是一场灾难。我在闪亮的画廊和谷歌中寻找了例子,但我没有看到类似的东西可以帮助我。

任何人都可以提供提示以修复我的服务器功能吗?

提前非常感谢。

【问题讨论】:

  • 在你的ggplot中使用data()而不是data(DFm)
  • 我做到了,在这种情况下,我得到:错误:ggplot2 不知道如何处理数字类的数据。但最重要的是没有创建 DFm,脚本在闪亮的应用程序中不起作用。
  • 为什么你只返回 DFm 而不是 DF 这实际上是一个数据框?
  • 完成!!!!就像将 DFm 更改为 DF 一样简单。我尝试使用 DF,没有 return(),但它不起作用。后来,我尝试用我需要的两列创建一个新的数据框,然后我使用了 return()。现在,我取消了 DFm 并返回(DF),它可以工作了....非常感谢....头痛了几天,这很容易.....
  • 很高兴回答您的问题并将其标记为已回答。

标签: r shiny shiny-server


【解决方案1】:

按照我们同事的建议,我可以通过在响应函数内部的 return() 中设置 DF(我创建的第一个数据帧)来解决我的问题。另一个困惑是如何从渲染图中的反应函数设置对象。

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多