Я делаю простое приложение Shiny, которое вводит имя игрока и статистику c, а затем возвращает процентиль, в котором находится игрок для этой статистики c. В настоящее время я столкнулся с проблемой, когда виджет «statisti c» вызывает ошибку (см. Заголовок). Вот пакеты, которые я использую, и образец данных:
library(shiny)
library(dplyr)
library(mosaic)
player <- c("John", "Mike", "Devon", "Greg", "Bruce", "Zachary", "Jack", "Graham", "Jordan", "Sandy")
team <- c("A", "B", "A", "B", "A", "B", "A", "B", "A", "B")
wins <- c(1:10)
losses <- c(10:1)
sampledata <- data.frame(player, team, wins, losses)
В приложении есть три виджета: (1) введите имя игрока, (2) выберите статистику и (3) ) выполнить выбор.
Результатом является одна строка текста.
Вот ui.r:
ui <- fluidPage(
titlePanel("Percentile Generator"),
sidebarLayout(
sidebarPanel(
textInput("playerfind",
"Player:",
value = "Devon"),
selectInput("stat1", "Select Statistic:",
choices = list("wins", "losses", "ties"),
selected = "wins"),
actionButton("action", label = "Generate Percentile!")
),
mainPanel(
textOutput("percentmachine")
))
)
Сервер немного сложнее. Шаг 1 фильтрует sample data
и создает фрейм данных 1x3 на основе входных данных. Шаг 2 извлекает необходимое значение из матрицы c и сохраняет его. Наконец, шаг 3 принимает входные данные из шага 2 и выдает процентиль.
server <- function(input, output) {
step1 <- reactive({sampledata %>%
transmute(player, stat = zscore(input$stat1)) %>%
filter(player == input$playerfind)})
step2 <- reactive({step1()[1,2]})
step3 <- reactive({round(pnorm(step2())*100, digits = 1)})
output$percentmachine <- renderText ({
input$action
isolate(paste(input$playerfind,
"had more",
input$stat1,
"than",
step3(),
"percent of players."))})
}
Я считаю, что ошибка возникает из-за input$stat1
на шаге 1. Если я заменю этот ввод заданным c stat Например, «выигрывает», блестящее приложение работает нормально, хотя статистику c изменить нельзя. Я боролся с этим довольно долгое время, поэтому решил спросить здесь. Заранее спасибо! xD