参数意味着不同的行数。 data.frame() 错误
Arguments imply differing number of rows. data.frame() Error
这个问题与此相关:How to change column values from date format to free-flowing text is dependent on "result" column in R shiny
我想填充一些输入并将其添加到 shiny 应用程序中的数据表中。
这是我的代码:
基本上这段代码有效,但前提是我在 Date of the result / Remarks for fail
中有日期
如果我在 Date of the result / Remarks for fail
中使用空白字段启动应用程序并按下 ADD
按钮,应用程序将停止并给出错误:
Arguments imply differing number of rows. data.frame() Error
library(shiny)
library(tidyverse)
library(DT)
library(shinyjs)
ui <- fluidPage(
shinyjs::useShinyjs(),
fluidRow(tabsetPanel(id='tabs',
tabPanel("Tab1",
div(id = "form",
textInput("schoolId",
label="SchoolId *"),
selectInput("userId",
label="UserId",
choices = c("UserA", "UserB", "UserC"),
selected = "UserA"),
textInput("class",
label = "class"),
selectInput("result",
label="result",
choices = c("PASS", "FAIL" )),
dateInput("resultdate",
value = NA,
label = "Date of the result / Remarks for fail",
format = "yyyy-mm-dd"),
textInput("remarks_fail",
label = "Remarks for fail")
),
actionButton("add", "Add")
),
tabPanel("Tab2",
tabPanel("View",
conditionalPanel("input.add != 0",
DTOutput("DT2"), hr(), downloadButton('downloadData', 'Download'))
)
)
)
)
)
server <- function(input, output, session) {
store <- reactiveValues()
observeEvent(input$result, {
if(input$result == "FAIL"){
shinyjs::disable("resultdate")
shinyjs::enable("remarks_fail")
} else {
shinyjs::enable("resultdate")
shinyjs::disable("remarks_fail")
}
})
observeEvent(input$add,{
new_entry <- data.frame(SCHOOLID=input$schoolId,
USERID=input$userId,
CLASS= input$class,
RESULT=input$result,
RESULT_DATE = input$resultdate,
REMARKS_FAIL = input$remarks_fail)
if("value" %in% names(store)){
store$value<-bind_rows(store$value, new_entry)
} else {
store$value<-new_entry
}
# If you want to reset the field values after each entry use the following two lines
for(textInputId in c("schoolId", "class")) updateTextInput(session, textInputId, value = "")
updateSelectInput(session, "userId", selected = "UserA")
updateSelectInput(session, "result", selected = "PASS")
updateDateInput(session, "resultdate")
})
output$DT2 <- renderDT({
store$value
})
}
shinyApp(ui, server)
我如何修改它也适用于空日期字段的代码?
您可以使用 ifelse
处理 zero-length 条目:
observeEvent(input$add,{
new_entry <- data.frame(
SCHOOLID=input$schoolId,
USERID=input$userId,
CLASS= input$class,
RESULT=input$result,
RESULT_DATE =as.Date(ifelse(length(input$resultdate)==0,NA_character_,input$resultdate),origin='1970-01-01'),
#...
}
这个问题与此相关:How to change column values from date format to free-flowing text is dependent on "result" column in R shiny
我想填充一些输入并将其添加到 shiny 应用程序中的数据表中。
这是我的代码:
基本上这段代码有效,但前提是我在 Date of the result / Remarks for fail
如果我在 Date of the result / Remarks for fail
中使用空白字段启动应用程序并按下 ADD
按钮,应用程序将停止并给出错误:
Arguments imply differing number of rows. data.frame() Error
library(shiny)
library(tidyverse)
library(DT)
library(shinyjs)
ui <- fluidPage(
shinyjs::useShinyjs(),
fluidRow(tabsetPanel(id='tabs',
tabPanel("Tab1",
div(id = "form",
textInput("schoolId",
label="SchoolId *"),
selectInput("userId",
label="UserId",
choices = c("UserA", "UserB", "UserC"),
selected = "UserA"),
textInput("class",
label = "class"),
selectInput("result",
label="result",
choices = c("PASS", "FAIL" )),
dateInput("resultdate",
value = NA,
label = "Date of the result / Remarks for fail",
format = "yyyy-mm-dd"),
textInput("remarks_fail",
label = "Remarks for fail")
),
actionButton("add", "Add")
),
tabPanel("Tab2",
tabPanel("View",
conditionalPanel("input.add != 0",
DTOutput("DT2"), hr(), downloadButton('downloadData', 'Download'))
)
)
)
)
)
server <- function(input, output, session) {
store <- reactiveValues()
observeEvent(input$result, {
if(input$result == "FAIL"){
shinyjs::disable("resultdate")
shinyjs::enable("remarks_fail")
} else {
shinyjs::enable("resultdate")
shinyjs::disable("remarks_fail")
}
})
observeEvent(input$add,{
new_entry <- data.frame(SCHOOLID=input$schoolId,
USERID=input$userId,
CLASS= input$class,
RESULT=input$result,
RESULT_DATE = input$resultdate,
REMARKS_FAIL = input$remarks_fail)
if("value" %in% names(store)){
store$value<-bind_rows(store$value, new_entry)
} else {
store$value<-new_entry
}
# If you want to reset the field values after each entry use the following two lines
for(textInputId in c("schoolId", "class")) updateTextInput(session, textInputId, value = "")
updateSelectInput(session, "userId", selected = "UserA")
updateSelectInput(session, "result", selected = "PASS")
updateDateInput(session, "resultdate")
})
output$DT2 <- renderDT({
store$value
})
}
shinyApp(ui, server)
我如何修改它也适用于空日期字段的代码?
您可以使用 ifelse
处理 zero-length 条目:
observeEvent(input$add,{
new_entry <- data.frame(
SCHOOLID=input$schoolId,
USERID=input$userId,
CLASS= input$class,
RESULT=input$result,
RESULT_DATE =as.Date(ifelse(length(input$resultdate)==0,NA_character_,input$resultdate),origin='1970-01-01'),
#...
}