【发布时间】: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