我是初學者,開頭值得一提。我想創建一個應用程式,用戶可以在其中輸入任意日期,并根據它計算該日期與資料表中某人最后一次活動之間的時間。如果該時間大于 input$disabled 的值,即預期的離線時間,我想顯示有關這些人的所有資訊。目前,我遇到以下問題:UseMethod 中的錯誤:“過濾器”沒有適用的方法應用于類“c('reactiveExpr','reactive','function')”和第二個物件:錯誤在 UseMethod 中:沒有適用于“mutate”的方法應用于“difftime”類的物件。
last_event 有一個字符型別,看起來像這樣:“2019-12-22 00:00:0”,這就是我在它上面覆寫 as.Date() 的原因。我不確定我是否正確使用了reactive(),因為這個應用程式是一個反復試驗的作業。有人能幫我嗎?我會很感激,因為現在對我來說有點令人沮喪。
last_event <- c("2019-12-26 00:00:00","2020-10-21 00:00:00","2020-05-27 00:00:01","2020-02-25 00:00:00","2020-10-09 00:00:00","2020-10-16 00:00:00","2019-12-01 00:00:01")
id <- c(1:7)
users_name <- c("Krox", "Minit", "Brulon", "Loc", "Mese02", "Robu78", "CoffeeMan")
data <- data.frame(id, users_name, last_event)
ui <- dashboardPage(
dashboardHeader(title = "X"),
dashboardSidebar(
dateInput(inputId = "date", label = "Podaj date : "),
sliderInput(inputId = "disabled", label = "Czas nieaktywnosci (msc): ", min = 6, max = 24, value = 12)),
dashboardBody(
dataTableOutput(outputId = "table")
))
server <- function(input, output){
reactive_data <- eventReactive(input$date, {
mutate(diff = (difftime(as.Date(input$date), as.Date(data$last_event)))/30)
data
})
output$table <- renderDataTable({
data <- reactive_data()
if (input$disabled){
data %>%
filter(diff > input$disabled)
}})
}
shinyApp(ui, server)
我也嘗試以另一種方式撰寫此代碼:
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(readxl)
library(dplyr)
data <- read_excel(file.choose())
ui <- dashboardPage(
dashboardHeader(title = "X"),
dashboardSidebar(
dateInput(inputId = "date", label = "Podaj date : "),
sliderInput(inputId = "disabled", label = "Czas nieaktywnosci (msc): ", min = 6, max = 24, value = 12)),
dashboardBody(
dataTableOutput(outputId = "table")
))
server <- function(input, output){
data1 <- reactive(data %>%
mutate(diff = (difftime(as.Date(input$date)) - as.Date(data1$last_event))/30))
output$table <- renderDataTable(data1 %>%
filter(diff > input$disabled))
}
shinyApp(ui, server)
uj5u.com熱心網友回復:
請嘗試以下操作:
last_event <- c("2019-12-26 00:00:00","2020-10-21 00:00:00","2020-05-27 00:00:01","2020-02-25 00:00:00","2020-10-09 00:00:00","2020-10-16 00:00:00","2019-12-01 00:00:01")
id <- c(1:7)
users_name <- c("Krox", "Minit", "Brulon", "Loc", "Mese02", "Robu78", "CoffeeMan")
data <- data.frame(id, users_name, last_event)
ui <- dashboardPage(
dashboardHeader(title = "X"),
dashboardSidebar(
dateInput(inputId = "date", label = "Podaj date : "),
sliderInput(inputId = "disabled", label = "Czas nieaktywnosci (msc): ", min = 6, max = 24, value = 12)),
dashboardBody(
dataTableOutput(outputId = "table")
))
server <- function(input, output){
reactive_data <- eventReactive(input$date, {
mutate(data, diff = (difftime(as.Date(input$date), as.Date(data$last_event)))/30)
})
output$table <- renderDataTable({
data <- reactive_data()
if (input$disabled){
data %>%
filter(diff > input$disabled)
}})
}
shinyApp(ui, server)
這條線需要作業:
mutate(data, diff = (difftime(as.Date(input$date), as.Date(data$last_event)))/30)
或者:
data %>% mutate(diff = (difftime(as.Date(input$date), as.Date(data$last_event)))/30)
更新
對于您的第二個代碼示例,請參見此處:
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(readxl)
library(dplyr)
data <- read_excel(file.choose())
ui <- dashboardPage(
dashboardHeader(title = "X"),
dashboardSidebar(
dateInput(inputId = "date", label = "Podaj date : "),
sliderInput(inputId = "disabled", label = "Czas nieaktywnosci (msc): ", min = 6, max = 24, value = 12)),
dashboardBody(
dataTableOutput(outputId = "table")
))
server <- function(input, output){
data1 <- reactive(data %>%
mutate(diff = (difftime(as.Date(input$date), as.Date(data$last_event))/30)))
output$table <- renderDataTable(data1() %>%
filter(diff > input$disabled))
}
shinyApp(ui, server)
uj5u.com熱心網友回復:
其實這個問題是我自己解決的,謝謝大家的解答。最終代碼如下所示:
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(readxl)
library(dplyr)
library(DT)
ui <- dashboardPage(
dashboardHeader(title = "X"),
dashboardSidebar(
dateInput(inputId = "date", label = "Choose date : "),
sliderInput(inputId = "disabled", label = "Choose time of inactivity: ", min = 6, max = 24, value = 12)),
dashboardBody(
dataTableOutput(outputId = "table")
))
server <- function(input, output){
data1 <- reactive(read_excel(file.choose()))
output$table <- renderDT({
data1() %>%
mutate(diff = (difftime(input$date, as.Date(last_event))/30)) %>%
filter(diff > input$disabled) %>%
select(-diff) %>%
DT::datatable(options(list(scrollX=TRUE)))
})
}
shinyApp(ui, server)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324572.html
