r - 发布到 Web 时闪亮主面板出错
问题描述
我正在为当前项目发布一个闪亮的应用程序,虽然它在本地运行没有错误,但当它发布到 shinyapps.io 时,我得到一个一般错误('发生错误')。
我试过调整绘图边距,摆弄代码和调试。
可以在此处找到源数据:[编辑 - 已删除源数据]
shinyapps 日志:https ://ctxt.io/2/AABA5KQDFA
可以在这里找到 Shiny 应用程序:https ://arcaravaggi.shinyapps.io/exploration_app/
library(shiny)
library(markdown)
library(dplyr)
library(lubridate)
library(ggplot2)
pdat <- read.csv("data/all_data.csv")
pdat <- pdat[order(pdat$species),]
pdat$visit_date <- as.Date(pdat$visit_date, format="%d/%m/%Y")
sp.nam <- unique(pdat$species)
pdat2 <- pdat %>% group_by(species) %>% filter(n() > 16) # Only include species with >16 records (power analysis - 0.95 power, 0.01 significance, r = 0.8)
pdat2$visit_date <- as.Date(pdat2$visit_date, format="%d/%m/%Y")
# Dataframe for summary data
pdat3 <- pdat %>% group_by(species) %>% summarize(
Count = length(species),
Male = length(sex[sex == "M"]),
Female = length(sex[sex == "F"]),
Weight_m = round(mean(weight, na.rm=TRUE),1),
Weight_SD = round(sd(weight, na.rm=TRUE),1),
Wing_m = round(mean(wing, na.rm=TRUE),1),
Wing_SD = round(sd(wing, na.rm=TRUE),1),
Max_t_m = round(mean(max_t, na.rm=TRUE),1),
Max_t_SD = round(sd(max_t, na.rm=TRUE),1),
Min_t_m = round(mean(min_t, na.rm=TRUE),1),
Min_t_SD = round(sd(min_t, na.rm=TRUE),1)
)
names(pdat3)[1] <- "Species"
ui <- navbarPage("Passerine biometrics",
tabPanel("Correlation plot",
sidebarLayout(
sidebarPanel(
h4("Subsetted to only include species with more than 16 records."),
selectInput('var', 'Species', unique(pdat2$species),
selected = unique(pdat2$species)[[1]]),
selectInput('xcol', 'X variable', names(pdat2)[c(8:11)],
selected = names(pdat2)[10]),
selectInput('ycol', 'Y variable', names(pdat2)[c(8:11)],
selected = names(pdat2)[11]),
hr(),
helpText("Wing, weight and tarsus measurements for passerine species collected as part of an ongoing study.")
),
mainPanel(
plotOutput('plot1'),
textOutput('count'),
textOutput("correlation")
)
)
),
tabPanel("Resampling",
sidebarLayout(
sidebarPanel(
h4("Variance in tarsus measurements"),
selectInput('sp', 'Species', unique(pdat2$species),
selected = unique(pdat2$species)[[1]]),
actionButton("update", "Update"),
sliderInput(inputId = 'max_grp',
label = "Maximum group size:",
min = 5, max = 250,value = 16),
sliderInput(inputId = 'reps',
label = "Number of iterations:",
min = 1, max = 100, value = 10),
hr(),
helpText("Mean & SD R^2 for a given species, based on minimum and maximum tarsus measurements. Data are randomly resampled-with-replacement, across X individuals ('group size') and Y iterations. Data are cleaned prior to processing - outliers are identified according to Tukey's 1.5*IQR threshold applied to the interaction between minimum and maximum tarsus measurements.")
),
mainPanel(
plotOutput('plot2')
)
)
),
tabPanel("Summary data",
sidebarLayout(
sidebarPanel(
checkboxGroupInput("show_vars", label = "Columns to show:",
choices = names(pdat3), selected = names(pdat3)),
hr(),
helpText("m = mean; SD = standard deviation.")
),
mainPanel(
DT::dataTableOutput("summary")
)
)
),
tabPanel("Raw data",
DT::dataTableOutput("raw")
)
)
server <- function(input, output, session) {
selectedData <- reactive({
a <- subset(pdat2, pdat2$species %in% input$var)
a <- droplevels(a)
a <- a[, c(input$xcol, input$ycol)]
names(a) <- c("x", "y")
a <- a[complete.cases(a), ]
})
selectedData2 <- reactive({
a <- subset(pdat2, pdat2$species %in% input$sp)
a <- droplevels(a)
a$temp <- a$min_t*a$max_t
})
pTResample <- function(df, mi = 1, ma = input$max_grp){
outlierKD <- function(dt, var) {
var_name <- eval(substitute(var),eval(dt))
na1 <- sum(is.na(var_name))
m1 <- mean(var_name, na.rm = T)
outlier <- boxplot.stats(var_name)$out
mo <- mean(outlier)
var_name <- ifelse(var_name %in% outlier, NA, var_name)
na2 <- sum(is.na(var_name))
m2 <- mean(var_name, na.rm = T)
dt[as.character(substitute(var))] <- invisible(var_name)
assign(as.character(as.list(match.call())$dt), dt, envir = .GlobalEnv)
dt <- dt[complete.cases(dt),] # data frame minus outliers
return(invisible(dt))
}
b <- outlierKD(a, temp)
b$temp <- NULL
grpResample <- function(f, v1, v2){
d <- data.frame(groupsize = c(mi:ma), s = NA)
for(i in nrow(d)){
for(i in mi:ma){
a <- f[sample(x = 1:nrow(f), size = i, replace = T), ]
d$s[i] <- cor(a$min_t,a$max_t)^2
}
return(d)
}
}
r <- replicate(input$reps, grpResample(b))
d <- data.frame(t((matrix(unlist(r), nrow=length(r), byrow=T))))
d <- d[,seq(2,ncol(d),2)]
w <- d %>% mutate(avg = apply(.,1,mean),
sd = apply(.,1,sd))
w$groupsize <- c(mi:ma)
w[is.na(w)] <- 0
return(w)
}
selectedData3 <- reactive({
input$update
tmp <- pTResample(selectedData2())
})
output$plot1 <- renderPlot({
par(mar = c(5.1, 4.1, 0, 1))
ggplot(selectedData(), aes(x=x, y=y)) +
stat_smooth(method=lm, fullrange=FALSE) +
geom_point()
})
output$plot2 <- renderPlot({
par(mar = c(5.1, 4.1, 3, 3))
ggplot(selectedData3(), aes(x = groupsize, y = avg)) +
geom_point(size = 2) +
geom_errorbar(aes(ymin = avg-sd, ymax = avg+sd)) +
geom_smooth()
})
output$count <- renderText({
paste("Count (n) = ", count(selectedData()))
})
output$correlation <- renderText({
paste("Correlation (R) = ", round(cor(selectedData()$x,selectedData()$y),2))
})
output$summary <- DT::renderDataTable({
DT::datatable(pdat3[, input$show_vars, drop = FALSE])
})
output$raw <- DT::renderDataTable({
DT::datatable(pdat)
})
}
shinyApp(ui, server)
我期望在第二个选项卡“重采样”上绘制一个 avg ~ groupize 的图,其中 groupsize 变量并取决于幻灯片输入。相反,主面板包含错误“发生错误。检查您的日志或联系应用作者进行澄清。
更新 [08/08/19 16:12]
按照凯利的建议,我重新命名了这个t
论点,这似乎有所帮助。但是当我清理环境时,我仍然遇到了问题。在我的本地机器上逐个加载内容,看起来 selectedData2 和 selectedData3 之间存在问题。如果我手动加载数据框a
,那么它可以工作。如果环境很清楚,那么我会收到一个关闭错误。
在我的编辑之后,我已经更新了上面的代码。
最新日志:
2019-08-08T15:18:43.544466+00:00 shinyapps[631266]: Warning: Error in eval: invalid 'envir' argument of type 'closure'
2019-08-08T15:18:43.554480+00:00 shinyapps[631266]: 199: outlierKD [/srv/connect/apps/exploration_app/app.R#112]
2019-08-08T15:18:43.554481+00:00 shinyapps[631266]: 198: pTResample [/srv/connect/apps/exploration_app/app.R#125]
2019-08-08T15:18:43.554482+00:00 shinyapps[631266]: 197: <reactive:selectedData3> [/srv/connect/apps/exploration_app/app.R#148]
2019-08-08T15:18:43.554478+00:00 shinyapps[631266]: 200: eval
2019-08-08T15:18:43.554483+00:00 shinyapps[631266]: 195: .func
2019-08-08T15:18:43.554484+00:00 shinyapps[631266]: 192: contextFunc
2019-08-08T15:18:43.554485+00:00 shinyapps[631266]: 191: env$runWith
2019-08-08T15:18:43.554485+00:00 shinyapps[631266]: 184: ctx$run
2019-08-08T15:18:43.554486+00:00 shinyapps[631266]: 183: self$.updateValue
2019-08-08T15:18:43.554489+00:00 shinyapps[631266]: 137: drawPlot
2019-08-08T15:18:43.554487+00:00 shinyapps[631266]: 181: selectedData3
2019-08-08T15:18:43.554488+00:00 shinyapps[631266]: 179: renderPlot [/srv/connect/apps/exploration_app/app.R#161]
2019-08-08T15:18:43.554489+00:00 shinyapps[631266]: 177: func
2019-08-08T15:18:43.554490+00:00 shinyapps[631266]: 123: <reactive:plotObj>
2019-08-08T15:18:43.554491+00:00 shinyapps[631266]: 107: drawReactive
2019-08-08T15:18:43.554518+00:00 shinyapps[631266]: 94: origRenderFunc
2019-08-08T15:18:43.554519+00:00 shinyapps[631266]: 93: output$plot2
2019-08-08T15:18:43.554521+00:00 shinyapps[631266]: 13: runApp
2019-08-08T15:18:43.554522+00:00 shinyapps[631266]: 12: fn
2019-08-08T15:18:43.554522+00:00 shinyapps[631266]: 7: connect$retry
2019-08-08T15:18:43.554523+00:00 shinyapps[631266]: 6: eval
2019-08-08T15:18:43.554524+00:00 shinyapps[631266]: 5: eval
更新 [08/08/2019 16:50]
解决它。我删除了 selectedData2 并将创建嵌套a
在 selectedData3 中。然后我将 pTResample 函数应用于 pdat2,而不是 selectedData2
解决方案
[OP 的错误日志,在推特上分享:https://ctxt.io/2/AABA5KQDFA]
我认为问题在这里发生:
var_name <- eval(substitute(var),eval(dt))
“eval”的第二个参数应该是一个环境。你在这里调用父函数:
b <- outlierKD(a, t)
我没有t
在任何地方看到定义,所以大概它正在尝试使用转置功能t()
。
因此,您的日志中出现错误:
警告:eval 中的错误:“closure”类型的“envir”参数无效
eval()
was的第二个参数t()
,它是一个函数(或闭包)。
(这是样式指南通常建议不使用短变量名的原因之一——它们与函数冲突并导致关于“闭包”的混淆错误!)
在您的家用计算机上,您可能已经t
在之前的测试中正确定义了您的环境,因此它当时没有抛出错误。
推荐阅读
- python - Python 硒脚本:
- javascript - 在 React Native 中的搜索两侧添加椭圆效果
- flutter - Flutter 播放声音并记录噪音水平
- amazon-web-services - 使用 nginx 的 docker 中的静态 Web 应用程序 - 部署在 AWS EC2 中
- regex - 正则表达式列出所有行
- laravel - 识别命名空间、模型和控制器的 PhpStorm 问题
- javascript - setTimeOut 延迟从 html 中的 url 加载 href - 不工作
- python - windows问题上的python cgal绑定
- swift - 如何修复 Swift 中的线程或处理错误?
- python - 'Polygon' 对象不可迭代 - iPython Cookbook