我正在尝试创建一个向现有数据框添加行的输入表单。 我使用了here描述的方法。
我遇到的问题是我有两个日期输入类型,使用此代码转换为整数。
以下是一些示例数据:
x_df <- data.frame(title = character(1), start = character(1), end = character(1))
x$title <- "Test1"
x$start <- as.Date("2017-12-16")
x$end <- as.Date("2017-12-17")
我的代码:
library(shiny)
runApp(
list(
ui = fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("Employee", "Choose an employee:",
choices_employee),
dateInput("Date_from", "From:", format = "yyyy/mm/dd"),
dateInput("Datum_until", "Until:", format = "yyyy/mm/dd"),
actionButton("Add", "Add")
)
)
),
server = function(input, output) {
values <- reactiveValues()
values$df <- x_df
addData <- observe({
# your action button condition
if(input$Add > 0) {
# create the new line to be added from your inputs
newLine <- isolate(c(input$Employee, input$Date_from, input$Date_until))
# update your data
# note the unlist of newLine, this prevents a bothersome warning message that the rbind will return regarding rownames because of using isolate.
values$df <- isolate(rbind(as.matrix(values$df), unlist(newLine)))
x_df <<- as.data.frame(values$df)
}
})
}
)
)
我认为isolate()
正在将日期转换为整数,任何人都知道如何才能使这项工作成功?任何帮助是极大的赞赏。如果我的问题不够明确,请告诉我,我会尽力改进。
谢谢!
答案 0 :(得分:0)
OP的帖子中的代码无效。因此,将其更改为使用renderDataTable
包中的DT
获取输出。此外,更改了as.matrix
和unlist
,这可能会在存在混合类列时更改列类型。例如,
unlist(as.list(Sys.Date() + 0:5))
#[1] 17537 17538 17539 17540 17541 17542
更正后的代码位于
之下library(DT)
library(shiny)
runApp(
list(
ui = fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("Employee", "Choose an employee:",
choices_employee),
dateInput("Date_from", "From:", format = "yyyy/mm/dd"),
dateInput("Date_until", "Until:", format = "yyyy/mm/dd"),
actionButton("Add", "Add")
),
mainPanel(
dataTableOutput("table")
)
)
),
server = function(input, output) {
values <- reactiveValues()
values$df <- x_df
addData <- observe({
if(input$Add > 0) {
# create the new line to be added from your inputs
newLine <- isolate(data.frame(title = input$Employee, start = as.Date(input$Date_from),
end = as.Date(input$Date_until), stringsAsFactors= FALSE))
values$df <- isolate(rbind(values$df, newLine))
}
})
output$table <- renderDataTable({values$df })
}
)
)
-output
x_df <- data.frame(title = character(1), start = character(1), end = character(1))
x_df$title <- "Test1"
x_df$start <- as.Date("2017-12-16")
x_df$end <- as.Date("2017-12-17")
choices_employee = LETTERS[1:5]