我的R程序按预期工作。它显示了一个包含我的dataFrame的表,并允许我编辑这些值。
如何捕获这些值并将其保存到我的数据帧或数据帧的副本中?
require(shiny)
library(rhandsontable)
DF = data.frame(val = 1:10, bool = TRUE, big = LETTERS[1:10],
small = letters[1:10],
dt = seq(from = Sys.Date(), by = "days", length.out = 10),
stringsAsFactors = F)
rhandsontable(DF, rowHeaders = NULL)
编辑: 上面的代码生成一个包含行和列的表。我可以编辑任何行和列。但是,当我查看我的dataFrame时,这些编辑不会出现。我想弄清楚的是我需要更改什么才能捕获已编辑的新值。
答案 0 :(得分:0)
我不知道你想要恢复什么,但这似乎有效:
DF <- rhandsontable(DF, rowHeaders = NULL)
library(jsonlite)
fromJSON(DF$x$data)
答案 1 :(得分:0)
我知道这个线程已经死了很多年,但这是该问题的第一个StackOverflow结果。
借助这篇帖子https://cxbonilla.github.io/2017-03-04-rhot-csv-edit/,我提出了以下建议:
library(shiny)
library(rhandsontable)
values <- list()
setHot <- function(x)
values[["hot"]] <<- x
DF <- data.frame(val = 1:10, bool = TRUE, big = LETTERS[1:10],
small = letters[1:10],
dt = seq(from = Sys.Date(), by = "days", length.out = 10),
stringsAsFactors = FALSE)
ui <- fluidPage(
rHandsontableOutput("hot"),
br(),
actionButton("saveBtn", "Save changes")
)
server <- function(input, output, session) {
observe({
input$saveBtn # update dataframe file each time the button is pressed
if (!is.null(values[["hot"]])) { # if there's a table input
DF <<- values$hot
}
})
observe({
if (!is.null(input$hot)){
DF <- (hot_to_r(input$hot))
setHot(DF)
}
})
output$hot <- renderRHandsontable({
rhandsontable(DF) %>% # actual rhandsontable object
hot_table(highlightCol = TRUE, highlightRow = TRUE, readOnly = TRUE) %>%
hot_col("big", readOnly = FALSE) %>%
hot_col("small", readOnly = FALSE)
})
}
shinyApp(ui = ui, server = server)
但是,我不喜欢DF <<- values$hot
方面的解决方案,因为我以前在将更改保存到全局环境方面遇到问题。不过,我无法以其他任何方式解决。