在rnorm和闪亮的警告:产生的NA

时间:2016-09-22 21:53:23

标签: r shiny warnings sampling normal-distribution

有没有人遇到并设法解决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

我需要在代码中进一步使用第一个变量。

提前感谢您的帮助。

1 个答案:

答案 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)