r - 条形图无法呈现(错误:第一个参数,`data`,必须是数据框或共享数据。[没有可用的堆栈跟踪])
问题描述
我有以下数据:
> data
creadate employee
2020-01-11 A A
2020-01-11 A A
2020-01-11 A A
2020-01-12 A B
2020-01-12 A B
2020-01-12 A C
2020-01-13 A C
2020-01-14 A C
2020-01-14 A D
2020-01-15 A D
目标是构建一个包含绘图的闪亮应用程序。首先,我想转换数据并添加另一列,该列计算每个时间范围(周、日和日期)-员工组合的出现次数。例如,一周的正常代码是:
data %>%
count(Week = week(creadate), employee)
现在,我想让用户可以在这三个选项之间进行选择。我编写了以下完整代码(具体参见#2)
library(shiny)
library(shinyWidgets)
library(tidyverse)
library(DT)
library(plotly)
data <- read.csv("Desktop/adf.csv")
ui <- fluidPage(
fluidRow(
column(4,
selectInput("timeFrame", "Select time frame", c("month", "week", "day"), multiple = TRUE),
dateRangeInput("date", "Select date", start = "2020-01-01"),
column(8,
plotlyOutput("errorTable")
)
)
)
server <- function(input, output, session) {
#create a reactive object with a NULL starting value
listofrows <- reactiveValues(data = NULL)
#observe the changes in inputs and update the reactive object
observeEvent(c(input$timeFrame, input$date), {
listofrows$data <- data %>%
subset(data, creadate >= input$date[1] & creadate <= input$date[2]) %>% # 1------------------------
count(input$timeFrame[1] = input$timeFrame[1](creadate), employee) # 2-----------------------------
}, ignoreInit = T,ignoreNULL = TRUE)
output$plot <- renderPlotly({
plot_ly(new_data,
x = ~ input$timeFrame[1],
y = ~ n,
color = ~ employee,
frame = ~ input$timeFrame[1],
type = 'scatter',
mode = 'markers'
)
}
)
}
shinyApp(ui, server)
但是,此代码不起作用。它说:
Error in : First argument, `data`, must be a data frame or shared data.
[No stack trace available]```
Do you have any idea?
解决方案
有多个问题。
第一个是subset
调用,如警告所示:你传递data
了两次——一次是通过第一个显式参数,一次是因为你在subset
管道的右侧使用;编码
data %>%
subset(data, creadate >= input$date[1] & creadate <= input$date[2]) …
是相同的
subset(data, data, creadate >= input$date[1] & creadate <= input$date[2]) …
要解决此问题,请删除该data
参数。此外,由于您使用的是 tidyverse,我建议您坚持使用它,而不是将其与基本功能混合使用;换句话说,使用filter
代替subset
. 除了一致性之外,该filter
函数在面对错误时也更加健壮,并且比subset
.
第二个问题是你的count
函数调用——你在这里试图做什么并不完全清楚。请查阅该count
函数的文档以确保您正确使用它。
还有更多的问题。例如,您的绘图代码使用了一个new_data
从未定义的变量。你可能想在listofrows$data
这里使用。to 的参数plot_ly
也是错误的:您不能将变量作为公式传递,您需要正确引用它们(例如 via formula(paste('~', input$timeFrame[1]))
)。
推荐阅读
- javascript - 如何为所有模式制作一个脚本?
- php - 尝试解码 json 时,编码的 json 数组在 cookie 中损坏
- ios - RxSwift 无法识别按钮点击事件
- python - Django 使用 inlineformset 重复数据库查找
- javascript - Marklogic 9 中奇怪的 xdmp.eval() toObject() 问题
- node.js - forEach 函数未在 tcp 事件中运行
- repository - 如何将包含一些代码的本地存储库链接到现有的 Bitbucket 存储库 - 也包含一些代码?
- r - 有没有办法在 Sparklyr 中应用“Smote”?
- python - Scrapy 超时和 Twisted.Internet.Error
- django - Django - 自定义 ModelMultipleChoiceField 无法根据父模型对选择进行分类