2016-09-22 6 views
0

Пришел ли кто-нибудь и сумел решить проблему с выборкой из обычного дистрибутива в Shiny R, пожалуйста? Я изо всех сил пытаюсь найти решение: этот вопрос задавали раньше, но ответа не было найдено.Предупреждение в rnorm и блестящий: произведены НС

Отбор проб с использованием rnorm дает результат, состоящий полностью из НС в Блестящем; нет таких проблем за пределами приложения Shiny.

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

Ваш параметр sd по умолчанию для rnorm отрицательный (-1.049822) для s_ln_rmax. Однако это положительно для s_ln_K (0.3920421), поэтому вы можете извлечь случайную выборку для одного набора параметров, а не для другого.

На самом деле вам придется изменить все свои параметры в sliderInput для «sd_Rmax».

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) 
+0

Спасибо - теперь это имеет смысл. К сожалению, ваше обходное решение не будет работать для моих целей; Я буду обрезать свои входы вместо использования журналов. Вздох. Еще раз спасибо. – user2196886

 Смежные вопросы

  • Нет связанных вопросов^_^