【发布时间】:2020-09-15 02:51:38
【问题描述】:
我正在制作一个简单的 Shiny 应用程序,它输入玩家的姓名和统计数据,然后返回玩家在该统计数据中的百分位数。我目前遇到“统计”小部件导致错误的问题(见标题)。
以下是我正在使用的包和数据示例:
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 步从矩阵中提取必要的值并将其存储。最后,第 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."))})
}
我相信错误来自步骤 1 中的 input$stat1。如果我将此输入替换为特定的统计信息,例如“wins”,那么虽然无法更改统计信息,但闪亮的应用程序运行良好。我已经为此苦苦挣扎了一段时间,所以我想我会在这里问。
提前致谢! xD
【问题讨论】:
-
您将
character值(input$stat1) 输入zscore,该函数需要numeric输入。如果你尝试zscore("A"),你会得到同样的错误。 -
此外,因为
zscore正在寻找数据分布以确定每个数据的 z 分数,也许您应该首先使用sampledata$z <- zscore(sampledata$wins)之类的东西计算您的 z 分数。 *耸耸肩* -
我无法想象
zscore(some_strings)的任何实例都可以工作,看看它的来源。也许您的 R 脚本正在提供不同的变量?您是否打算从数据中获取input$stat1column 并将其放入其中?也许你的意思是zscore(sampledata[,input$stat1])? (除了框架没有"ties"列...) -
我认为我正在从数据中访问该列,因为
sample data已通过管道转换,尽管我没有!感谢您的澄清,如果您将该评论写为答案,我会将其标记为已解决:)