其目标是创建一个闪亮的应用程序来记录野外数据。观察者记录每个个体的物种名称,性别和大小(这里限制为3个选择)。更新按钮,创建一个 Dataframe 的一行,这是绑定到一个React表。该表是显示在应用程序上,以检查潜在的输入错误。此表可编辑,以便观察者在发现错误时直接将数据更正到表中。
问题是,当我更新一个新条目时,表被编辑,版本消失,旧值又回来了,所以我添加了一个observeEvent来更改dataframe中的值。不幸的是,我得到:“〈-中的错误:invalid(NULL)left side of assignment”.如果我用完全相同的值替换该值,它不会返回错误,但如果我更改它,则会出现错误消息,例如在sexe列中将“M”替换为“F”。
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "sp", label = "sp", choices = c("espece1", "espece2")),
radioGroupButtons(inputId = "sexe", label = "sexe", choices = c("M", "F"), status = "custom-class"),
radioGroupButtons(inputId = "size", label = "size", choices = c("30", "20", "10"), status = "custom-class"),
actionButton("update", "Update Table")
),
mainPanel(
dataTableOutput("table1")
)
)
)
server <- function(input, output, session) {
mydata <- reactiveVal(data.frame(sp = character(),
sexe = character(),
size = character(),
stringsAsFactors = FALSE))
observeEvent(input$update, {
to_add <- data.frame(sp = input$sp,
sexe = input$sexe,
size = input$size)
mydata(rbind(mydata(), to_add))
})
output$table1 <- DT::renderDataTable({
datatable(mydata(), editable = "cell",
options = list(pageLength = 50,
paging = FALSE))
})
observeEvent(input$table1_cell_edit, {
info <- input$table1_cell_edit
row <- info$row
col <- info$col
value <- info$value
mydata()[row,col] <- value
})
}
shinyApp(ui, server)
以下是我的一些尝试:
- 在info$row和info$col处添加+1,即使rowname = TRUE,我也会得到相同的错误。
mydata()\[row,col\] \<\<- isolate(DT::coerceValue(value, mydata()\[row,col\]))
仍然是相同的错误。- 将我的响应式 Dataframe 转换为我得到的非响应式 Dataframe :
"Error in \<-: object of type 'closure' is not subsettable"
.提前感谢您的帮助
1条答案
按热度按时间vq8itlhq1#
要获得
reactiveVal
ue的值,比如reacval
,你必须执行val <- reacval()
。要更改它,你必须执行reacval(newval)
。所以在这里你可以这样做: