Я пытаюсь создать блестящее приложение, которое принимает различные входные данные и создает выходную таблицу, в которой есть столбцы, в которых записываются пользовательские входные данные и вычисляется поле затрат на основе пользовательских входных данных. Мне удалось создать таблицу данных с пользовательскими вводами, но я не могу получить поле, которое вычисляет что-то новое на основе входных данных.
data <- structure(list(product = c("Cars", "Trucks", "Buses", "Cars",
"Trucks", "Buses"), offshore = c(0, 0, 0, 1, 1, 1)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
library(shiny)
library(DT)
library(data.table)
library(lubridate)
library(tidyverse)
mydata = data.frame(Product=NA,
Start_date = NA,
End_date = NA,
On_shore_cost = NA,
Off_shore_cost = NA,
Cost = NA)
ui <- fluidPage(
wellPanel(
flowLayout(
selectInput("select", "Product",
choices = list("Cars" = 1,
"Trucks" = 2,
"Buses" = 3), selected = 1),
dateInput("sdate", "Start date"),
dateInput("edate", "End date"),
numericInput("onshore","On-Shore Cost",1),
numericInput("offshore","Off-Shore Cost",1)
actionButton("action","Blast Off")),
downloadButton("downloadData", "Download")),
dataTableOutput("table")
)
Поле, которое я пытаюсь создать, это поле "Cost =". Я использую выражение dplyr для манипулирования данными. Я не могу заставить это работать. В качестве бонуса, когда пользователь создает таблицу, которую он хочет, я хотел бы, чтобы он мог ее скачать. Я еще не потратил много времени на загрузку. Не могли бы вы помочь мне выяснить, как заполнить поле «Стоимость» таблицы данных?
# Define server logic
server <- function(input, output) {
output$table <- renderDataTable( df())
df <- eventReactive(input$action,{
if(input$select!="" && !is.null(input$onshore) && input$action>0){
newrow = data.table(Product = input$select,
Start_date = as.character(input$sdate),
End_date = as.character(input$edate),
On_shore_cost =input$onshore,
Off_shore_cost = input$offshore,
#########This is the trouble spot, I am trying to generate this field
Cost = renderText({data %>% filter(product == input$select) %>%
mutate(pc_cost= ifelse(offshore == 0 , input$onshore,input$offshore)) %>%
summarise(total = sum(pc_cost)) %>% pull()}) )
mydata <<- rbind(mydata, newrow)
}
mydata
}, ignoreNULL = FALSE)
}
# Run the application
shinyApp(ui = ui, server = server)