有没有人遇到并设法解决Shiny R中正态分布抽样的问题,好吗?我很难找到解决方案:之前曾问过这个问题,但没有找到答案。
使用rnorm
进行采样会导致输出完全由Shiny中的NA组成; Shiny app之外没有这样的问题。
library(shiny)
ui<-shinyUI(fluidPage(
sidebarPanel(
sliderInput("Rmax", label="growth", min=0,max=2, value=1),
sliderInput("sd_Rmax", label = "sd for rmax", min=0.05, max=1, value = 0.35),
sliderInput("K", label="K", min=2, max=70, value = 10.1),
sliderInput("sd_K", label="sd for K", min=2,max=70, value=1.48),
sliderInput("ss", label="Sample Size", min=30,max=300, value=30)
),
mainPanel(
verbatimTextOutput("Statistics"))
))
server<-shinyServer(function(input, output){
data<-reactive({
#here are my inputs; convert inputs to log-scale:
ln_rmax<-log(input$Rmax, base=exp(1))
ln_K<-log(input$K, base=exp(1))
ln_sd_rmax<-log(input$sd_Rmax, base=exp(1))
ln_sd_K<-log(input$sd_K, base=exp(1))
#sample from normal
s_ln_rmax<-rnorm(input$ss*19,mean=ln_rmax,sd=ln_sd_rmax) # Here's where the problem is
s_ln_K<-rnorm(input$ss*19,mean=ln_K,sd=ln_sd_K)
phi<-seq(0,0.9, by=0.05)
phi_s<-rep(phi, input$ss)
#convert back
s_rmax<-exp(s_ln_rmax)
s_K<-exp(s_ln_K)
D<-runif(19*input$ss,min=0.2*s_K, max=0.8*s_K)
#combine into a dataframe
combs<-as.data.frame(cbind(s_rmax,s_K, phi_s, D))
})
output$Statistics <- renderPrint({ summary(data())})
})
shinyApp(server = server, ui = ui)
这是我得到的警告信息:
Warning in rnorm(input$ss * 19, mean = ln_rmax, sd = ln_sd_rmax) : NAs produced
。奇怪的是,问题在于第一个采样变量s_rmax
,而不是第二个采样变量s_K
。
我需要在代码中进一步使用第一个变量。
提前感谢您的帮助。
答案 0 :(得分:1)
sd
的{{1}}默认rnorm
参数为s_ln_rmax
为负(-1.049822)。但是,它对s_ln_K
(0.3920421)是正的,因此你可以为一组参数而不是另一组参数提取随机样本。
实际上,您必须更改&#34; sd_Rmax&#34;的sliderInput中的所有参数。
sliderInput("sd_Rmax", label = "sd for rmax", min=0.05, max=1, value = 0.35)
由于你如何变换input$sd_Rmax
,排除了获得随机分布的任何可能性。如果你想使用自然日志继续转换输入,它必须是这种类型的东西:
sliderInput("sd_Rmax", label = "sd for rmax", min=1, max=Inf, value = 2.5)