R 有条件地更新闪亮的数据表单元格。我的代码有效。这是一种方法吗;接近声音?
问题:R 有条件地更新闪亮的数据表单元格。我的代码有效。这是一种方法吗;接近声音?,r,shiny,dt,R,Shiny,Dt,问题: Session info -------------------------------------------------------------------------------------------------------- setting value version R version 3.3.1 (2016-06-21) system x86_64, linux-gnu ui R
Session info --------------------------------------------------------------------------------------------------------
setting value
version R version 3.3.1 (2016-06-21)
system x86_64, linux-gnu
ui RStudio (0.99.903)
language (EN)
collate en_US.UTF-8
tz posixrules
date 2017-06-13
Packages ------------------------------------------------------------------------------------------------------------
package * version date source
assertthat 0.2.0 2017-04-11 cran (@0.2.0)
bitops 1.0-6 2013-08-17 CRAN (R 3.3.1)
Cairo 1.5-9 2015-09-26 CRAN (R 3.3.1)
chron 2.3-47 2015-06-24 CRAN (R 3.3.1)
colorspace 1.2-6 2015-03-11 CRAN (R 3.3.1)
crosstalk 1.0.0 2016-12-21 cran (@1.0.0)
data.table * 1.9.6 2015-09-19 CRAN (R 3.3.1)
DBI 0.5-1 2016-09-10 CRAN (R 3.3.1)
devtools 1.12.0 2016-06-24 CRAN (R 3.3.1)
digest 0.6.12 2017-01-27 cran (@0.6.12)
dplyr 0.5.0 2016-06-24 CRAN (R 3.3.1)
DT * 0.2.11 2017-05-30 Github (rstudio/DT@e554560)
geosphere * 1.5-5 2016-06-15 CRAN (R 3.3.1)
ggmap * 2.7 2017-01-17 Github (dkahle/ggmap@c6b7579)
ggplot2 * 2.2.0 2017-03-27 Github (hadley/ggplot2@0cf7c56)
gtable 0.2.0 2016-02-26 CRAN (R 3.3.1)
htmltools 0.3.6 2017-04-28 cran (@0.3.6)
htmlwidgets 0.9 2017-05-19 Github (ramnathv/htmlwidgets@387508c)
httpuv 1.3.3 2015-08-04 CRAN (R 3.3.1)
jpeg 0.1-8 2014-01-23 CRAN (R 3.3.1)
jsonlite 1.4 2017-04-08 cran (@1.4)
labeling 0.3 2014-08-23 CRAN (R 3.3.1)
lattice 0.20-34 2016-09-06 CRAN (R 3.3.1)
lazyeval 0.2.0 2016-06-12 CRAN (R 3.3.1)
magrittr 1.5 2014-11-22 CRAN (R 3.3.1)
mapproj 1.2-4 2015-08-03 CRAN (R 3.3.1)
maps * 3.1.1 2016-07-27 CRAN (R 3.3.1)
markdown * 0.8 2017-04-20 cran (@0.8)
memoise 1.0.0 2016-01-29 CRAN (R 3.3.1)
mime 0.5 2016-07-07 CRAN (R 3.3.1)
munsell 0.4.3 2016-02-13 CRAN (R 3.3.1)
plyr 1.8.4 2016-06-08 CRAN (R 3.3.1)
png 0.1-7 2013-12-03 CRAN (R 3.3.1)
proto 1.0.0 2016-10-29 cran (@1.0.0)
R6 2.2.1 2017-05-10 cran (@2.2.1)
Rcpp 0.12.10 2017-03-19 cran (@0.12.10)
reshape2 1.4.2 2016-10-22 cran (@1.4.2)
RgoogleMaps 1.4.1 2016-09-18 CRAN (R 3.3.1)
rhandsontable * 0.3.4 2016-11-03 CRAN (R 3.3.1)
rjson 0.2.15 2014-11-03 CRAN (R 3.3.1)
rlang 0.1.1 2017-05-18 cran (@0.1.1)
rstudioapi 0.6 2016-06-27 CRAN (R 3.3.1)
scales * 0.4.1 2016-11-09 CRAN (R 3.3.1)
shiny * 1.0.3 2017-04-26 cran (@1.0.3)
shinydashboard * 0.5.3 2016-09-20 CRAN (R 3.3.1)
sp * 1.2-3 2016-04-14 CRAN (R 3.3.1)
stringdist * 0.9.4.4 2016-12-16 CRAN (R 3.3.1)
stringi 1.1.5 2017-04-07 cran (@1.1.5)
stringr * 1.2.0 2017-02-18 CRAN (R 3.3.1)
tibble 1.3.1 2017-05-17 cran (@1.3.1)
withr 1.0.2 2016-06-20 CRAN (R 3.3.1)
xtable 1.8-2 2016-02-05 CRAN (R 3.3.1)
yaml 2.1.14 2016-11-12 cran (@2.1.14)
>
要有条件地更新数据表单元格,我的方法是使用observeEvent,输入$dt_rows_selected并替换数据。请参阅下面的最小可复制代码
这种做法合理吗?有效率的在renderPrint或其他东西中替换数据是更好的方法吗?下面的最小可复制代码有效。我还不清楚内部发生的细微差别
目标:
我的目标是有条件地更新选定的数据表单元格。更具体地说,当a)“destination.column”中包含的值为空(第5、10、15行…)和b)用户以交互方式单击某一行时,有条件地更新“destination.column”的内容
背景:
Session info --------------------------------------------------------------------------------------------------------
setting value
version R version 3.3.1 (2016-06-21)
system x86_64, linux-gnu
ui RStudio (0.99.903)
language (EN)
collate en_US.UTF-8
tz posixrules
date 2017-06-13
Packages ------------------------------------------------------------------------------------------------------------
package * version date source
assertthat 0.2.0 2017-04-11 cran (@0.2.0)
bitops 1.0-6 2013-08-17 CRAN (R 3.3.1)
Cairo 1.5-9 2015-09-26 CRAN (R 3.3.1)
chron 2.3-47 2015-06-24 CRAN (R 3.3.1)
colorspace 1.2-6 2015-03-11 CRAN (R 3.3.1)
crosstalk 1.0.0 2016-12-21 cran (@1.0.0)
data.table * 1.9.6 2015-09-19 CRAN (R 3.3.1)
DBI 0.5-1 2016-09-10 CRAN (R 3.3.1)
devtools 1.12.0 2016-06-24 CRAN (R 3.3.1)
digest 0.6.12 2017-01-27 cran (@0.6.12)
dplyr 0.5.0 2016-06-24 CRAN (R 3.3.1)
DT * 0.2.11 2017-05-30 Github (rstudio/DT@e554560)
geosphere * 1.5-5 2016-06-15 CRAN (R 3.3.1)
ggmap * 2.7 2017-01-17 Github (dkahle/ggmap@c6b7579)
ggplot2 * 2.2.0 2017-03-27 Github (hadley/ggplot2@0cf7c56)
gtable 0.2.0 2016-02-26 CRAN (R 3.3.1)
htmltools 0.3.6 2017-04-28 cran (@0.3.6)
htmlwidgets 0.9 2017-05-19 Github (ramnathv/htmlwidgets@387508c)
httpuv 1.3.3 2015-08-04 CRAN (R 3.3.1)
jpeg 0.1-8 2014-01-23 CRAN (R 3.3.1)
jsonlite 1.4 2017-04-08 cran (@1.4)
labeling 0.3 2014-08-23 CRAN (R 3.3.1)
lattice 0.20-34 2016-09-06 CRAN (R 3.3.1)
lazyeval 0.2.0 2016-06-12 CRAN (R 3.3.1)
magrittr 1.5 2014-11-22 CRAN (R 3.3.1)
mapproj 1.2-4 2015-08-03 CRAN (R 3.3.1)
maps * 3.1.1 2016-07-27 CRAN (R 3.3.1)
markdown * 0.8 2017-04-20 cran (@0.8)
memoise 1.0.0 2016-01-29 CRAN (R 3.3.1)
mime 0.5 2016-07-07 CRAN (R 3.3.1)
munsell 0.4.3 2016-02-13 CRAN (R 3.3.1)
plyr 1.8.4 2016-06-08 CRAN (R 3.3.1)
png 0.1-7 2013-12-03 CRAN (R 3.3.1)
proto 1.0.0 2016-10-29 cran (@1.0.0)
R6 2.2.1 2017-05-10 cran (@2.2.1)
Rcpp 0.12.10 2017-03-19 cran (@0.12.10)
reshape2 1.4.2 2016-10-22 cran (@1.4.2)
RgoogleMaps 1.4.1 2016-09-18 CRAN (R 3.3.1)
rhandsontable * 0.3.4 2016-11-03 CRAN (R 3.3.1)
rjson 0.2.15 2014-11-03 CRAN (R 3.3.1)
rlang 0.1.1 2017-05-18 cran (@0.1.1)
rstudioapi 0.6 2016-06-27 CRAN (R 3.3.1)
scales * 0.4.1 2016-11-09 CRAN (R 3.3.1)
shiny * 1.0.3 2017-04-26 cran (@1.0.3)
shinydashboard * 0.5.3 2016-09-20 CRAN (R 3.3.1)
sp * 1.2-3 2016-04-14 CRAN (R 3.3.1)
stringdist * 0.9.4.4 2016-12-16 CRAN (R 3.3.1)
stringi 1.1.5 2017-04-07 cran (@1.1.5)
stringr * 1.2.0 2017-02-18 CRAN (R 3.3.1)
tibble 1.3.1 2017-05-17 cran (@1.3.1)
withr 1.0.2 2016-06-20 CRAN (R 3.3.1)
xtable 1.8-2 2016-02-05 CRAN (R 3.3.1)
yaml 2.1.14 2016-11-12 cran (@2.1.14)
>
数据量很大。data.table可能包含约100k行,而修改的数量预计为数百行,甚至数千行。因此,我的目标是构建一个简化且易于使用的界面/体验
选择研究
我将继续学习包括:
- 这是一个仪表板示例。这很酷,但是修改的弹出质量在我的高数据量环境中不起作用
- 如果我理解这个示例,建议将replaceData语句绑定到操作按钮
library (shiny)
library (data.table)
library (DT)
options (shiny.reactlog = T)
row.cnt <- 10000
dt <- data.table (row.number = 1:row.cnt # create dummy table
, destination.column = rep (c('a','b','c','d',''),times=row.cnt/5)
, source.column = rep (c('','','','','e'),times=row.cnt/5)
, score = round (runif(1:row.cnt),4))
ui <- fluidPage( h2 ('Minimal code to modify contents of a datatable')
, hr ()
, fluidRow ( DT::dataTableOutput("dt") )
, hr ()
, fluidRow (
column (width = 2
, actionButton ('select.curr.page', 'Select Current Page')
, br() , br()
, actionButton ('select.clear', 'Clear All Selections') )
, column (width = 10, verbatimTextOutput ('selected.rows') ) )
, hr ()
)
server <- function(input, output){
output$dt <- DT::renderDataTable({
DT::datatable( dt
, filter = 'bottom'
, selection = "multi"
# , server = TRUE
, options = list(lengthMenu = list(c(1, 5, 10, 15, 25, 50, -1), c('1','5', '10', '15', 25, 50, 'All')), pageLength = 15)
)
})
output$selected.rows = renderPrint({
s = input$dt_rows_selected
cell.clicked <<- input$dt_cell_clicked
if (length(s)) {
cat('These rows were selected:\n\n')
cat(s, sep = ', ')
cat ('\n\n')
cat ('cell.clicked$row-',cell.clicked$row,'\n\n')
cat (str(cell.clicked),'\n', sep=',')
}
})
dt.proxy <- dataTableProxy ('dt')
observeEvent ( input$dt_rows_selected, {
if ( dt [ cell.clicked$row, destination.column ] == '' ) {
dt [ cell.clicked$row, destination.column := source.column ]
replaceData(dt.proxy,dt,resetPaging=F,clearSelection='none')
}
})
observeEvent (input$select.curr.page, {
cat ('select.curr.page',input$dt_rows_current,sep='-')
dt.proxy %>% selectRows ( sort (unique (c(input$dt_rows_current,input$dt_rows_selected))))
})
observeEvent (input$select.clear, {
dt.proxy %>% selectRows ( NULL )
})
}
shinyApp(ui, server)
你有没有找到解决这个问题的办法?我自己也在尝试解决一些类似的问题。你有没有找到解决这个问题的办法?我试图自己解决一些类似的问题。