我有一个使用DT-package 显示数据表的闪亮应用程序.我想要的是能够以自定义方式格式化列.例如,我想要一个货币值显示如下:1,234.50€而不是-way DT,它显示它像$ 1,234.5(注意符号的变化,货币符号的位置以及小数点后的数字-点).
MWE看起来像这样:
library(shiny)
library(DT)
shinyApp(
# UI
ui = fluidPage(DT::dataTableOutput('tbl')),
# SERVER
server = function(input, output) {
dat <- data.frame(cur = 1234.5, # supposed to be displayed as: 1,234.50€ | Bad!
# displayed as $1,234.5
perc = 0.123456, # 12.34% | Good!
num = 1000) # 1,000 | Bad! displayed as 1000
# render DT
output$tbl = DT::renderDataTable(
datatable(dat) %>%
formatCurrency(c('cur'), "$") %>%
formatPercentage('perc', 2) %>%
formatRound('num', digits = 0)
)
}
)
Run Code Online (Sandbox Code Playgroud)
但它做得相当不错,当将货币符号更改为时 …
我正在创建一个Shiny应用程序,它在屏幕顶部显示data.frame信息,在底部显示特定的变量统计信息.用户可以通过与DT::datatable对象交互来导航data.frame列.
当用户点击变量时,会显示可以编辑的详细信息.我希望这些信息能够更新并反映在数据表中.我的问题是,当我更新表时,它会从一开始就呈现并显示.如何在编辑后保留数据表的页面和行选择?
这是一个最小的工作示例,显示了a中的mtcars数据集DT::datatable.我有一些控制更新字段.请注意,数据表重新渲染回第一页.
library(shiny)
runApp(shinyApp(
ui = fluidPage(
title = "minimal-working-example",
fluidRow(
column(3, inputPanel(
selectInput("field", "Field", choices = names(mtcars)),
numericInput("value", "Value", 0),
actionButton("submit", "Submit")
)),
column(9,
DT::dataTableOutput("table")
)
)
),
server = function(input, output) {
v <- reactiveValues(mtcars=mtcars)
observeEvent(input$submit, {
v$mtcars[input$field] <- input$value
})
output$table <- DT::renderDataTable({
DT::datatable(
v$mtcars,
selection = "single",
options = list(pageLength = 5))
})
}
))
Run Code Online (Sandbox Code Playgroud)
会话信息:
Session info --------------------------
setting value
version R version 3.3.0 (2016-05-03)
system x86_64, mingw32
ui …Run Code Online (Sandbox Code Playgroud) 我希望能够在渲染数据表时获得"更细"的行DT(即减小该高度)
options(digits.secs=6)
library(data.table)
d = data.table(x = 1:10,time = as.POSIXct('2015-03-23 12:00:00.123'))
library(DT)
datatable(d)
Run Code Online (Sandbox Code Playgroud)
我正在用plot_ly散点图构建一个闪亮的应用程序.我正在使用一个SharedData对象(来自串扰包)在绘图和a datatable(来自DT)之间共享信息.
问题是当您单击绘图中的某个点时,它会使所有其他点的颜色变暗,并为所选点的图例添加一个条目,一旦发生这种情况,似乎没有办法撤消它.我想禁用这些视觉更改,但仍能检测到点击次数.
如果我只是在调用的数据参数中使用被动data.frame而不是SharedData对象plot_ly,但是event_data从图中没有足够的信息来选择行中的行,则不会发生此问题datatable.(点x和y点坐标是浮点数字,因此坐标与数据匹配可能会产生意外结果.)
这是一个演示使用mtcars:
library(shiny)
library(DT)
library(plotly)
library(data.table)
library(crosstalk)
### UI function ---------
ui <- fluidPage(
fluidRow(
plotlyOutput('my_graph', height = '400px')
),
fluidRow(
dataTableOutput('my_table')
)
)
### Server function -------
server <- function(input, output, session) {
### SharedData object ----
filtered_data <- reactive({
data.table(mtcars, keep.rownames = TRUE)
})
shared_data <- reactive({
req(filtered_data())
SharedData$new(filtered_data(), ~rn)
})
### my_graph ---- …Run Code Online (Sandbox Code Playgroud) 我正在尝试将复选框放入 DT 表并收集有关已选中行的信息。
我的代码如下
shinyApp(
ui = fluidPage(
fluidRow(
verbatimTextOutput("value1"),
column(12,
DT::dataTableOutput('table'), tags$script(HTML('$(document).on("click", "input", function () {
var checkboxes = document.getElementsByName("selected");
var checkboxesChecked = [];
for (var i=0; i<checkboxes.length; i++) {
if (checkboxes[i].checked) {
checkboxesChecked.push(checkboxes[i].value);
}
}
Shiny.onInputChange("checked_rows",checkboxesChecked); })'))
))),
server = function(input, output) {
library(DT)
library(glue)
output$value1 <- renderPrint({ input$checked_rows })
output$table <- DT::renderDataTable({
iris$checked<-''
iris$checked[2:5]<-'checked=\"checked\"'
iris[["Select"]]<-glue::glue('<input type="checkbox" name="selected" {iris$checked} value="{1:nrow(iris)}"><br>')
datatable(iris,escape=F,rownames=F, class = 'cell-border compact',
options=list(ordering=T,autowidth=F,scrollX = TRUE,
columnDefs = list(list(className = 'dt-center', targets = "_all"))
),
selection="none" …Run Code Online (Sandbox Code Playgroud) 是否可以通过编辑DT :: DataTable来更新被动数据源?下面的代码是基于这个代码的变化,x被激活了.尝试在observeEvent中更改x时,问题就开始了.
有x反应的目的是我打算从外部数据库中获取它,然后编辑DT :: DataTable写回数据库,以便它与用户看到的内容保持同步(我很好那 - 它不是问题的一部分).
library(shiny)
library(DT)
shinyApp(
ui = fluidPage(
DTOutput('x1')
),
server = function(input, output, session) {
x = reactive({
df <- iris
df$Date = Sys.time() + seq_len(nrow(df))
df
})
output$x1 = renderDT(x(), selection = 'none', editable = TRUE)
proxy = dataTableProxy('x1')
observeEvent(input$x1_cell_edit, {
info = input$x1_cell_edit
str(info)
i = info$row
j = info$col
v = info$value
# problem starts here
x()[i, j] <<- isolate(DT::coerceValue(v, x()[i, j]))
replaceData(proxy, x(), resetPaging = FALSE) # …Run Code Online (Sandbox Code Playgroud) 我有一个 Shiny Server 应用程序,用户可以在其中编辑数据表,然后相应地更新一些反应性摘要统计信息。我在一个相当慢的框架上托管这个应用程序,这就是为什么我想使用客户端处理进行 DT 渲染,即server = F传递给DT::renderDataTable. 让我分解我的问题的要点:
代码在server = T通过时完全可操作。
当传递 时server = F,当用户在 DT 中编辑单元格时,浏览器会抛出以下错误消息:
DataTables 警告:table id=DataTables_Table_5 - JSON 响应无效。有关此错误的更多信息,请参阅 http://datatables.net/tn/1
有趣的是,当这个错误窗口被关闭时,依赖摘要统计信息会根据编辑正确更新,并且 Shiny 应用程序继续。因此,除错误外,一切正常。我应该注意到,我访问了错误中提到的网站,但没有变得更聪明。
下面可重现的例子:
library(shiny)
library(DT)
dt = data.frame(V1 = c(1,2), V2 = c(3,4))
server <- function(input, output, session) {
val = reactiveValues(mat = data.table(dt))
output$testDT = renderDataTable({
DT::datatable(val$mat, editable = TRUE)
}, server = FALSE)
proxy = dataTableProxy('testDT')
observeEvent(input$testDT_cell_edit, {
info = input$testDT_cell_edit
str(info) …Run Code Online (Sandbox Code Playgroud) 我一直在努力尝试掌握如何使 DT::dataTableProxy在我的应用程序中使用 DT in Shiny工作,但我无法通过返回所选列。
按照此处的示例,我尝试修改代码以打印描述性统计数据(使用pastecs)。但唯一呈现的是所选的文字列。
#modified UI, adding another verbatimTextOutput
ui =
...
verbatimTextOutput('foo2')
server =
...
output$foo2= renderPrint({
x<-input$foo_columns_selected
stat.desc(x)
})
Run Code Online (Sandbox Code Playgroud)
我想做的是获取所选列的值,然后运行该函数
stat.desc。在上面的示例中,它将在第 2 列 (Sepal.Width) 上运行,并呈现描述性统计数据。像这样:
展望未来,我希望对stat.desc来自多个 selectInput 的渲染数据表执行操作。但是..一次一步。我想首先了解如何获取实际值来执行功能。
所以,我想我知道如何成功地完成我需要的事情。如果其他用户可以验证它是否正常工作,我会很高兴:
更新的脚本:
require(DT)
library(dplyr)
library(tibble)
ui<-
fluidPage(
selectInput('obj','Choose Name:', choices = c('',my.data$Name), selectize = TRUE),
dateRangeInput('daterange',"Date range:",
start= min(my.data$Date),
end = max(my.data$Date)),
mainPanel(
dataTableOutput('filteredTable'),
dataTableOutput('filteredTable2'),
tableOutput('table')
)
)
server<-function(input,output, session){
filteredTable_data <- reactive({
my.data %>% rownames_to_column() %>% …Run Code Online (Sandbox Code Playgroud) 我正在处理超过10万行的表并使用DT包(开发版本0.1.56)在Shiny App 中将其可视化.
此外,我使用DTExtensions作为:Buttons,以不同的格式下载数据.然而,虽然Scroller扩展也被激活,但我只能下载几行(不是所有数据).
示例代码:
library("shiny")
library("DT")
shinyApp(
ui = fluidPage(DT::dataTableOutput('tbl')),
server = function(input, output) {
output$tbl = DT::renderDataTable(
iris,extensions=c("Buttons",'Scroller'),options = list(dom = 'Bfrtip',
buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),scrollY = 50,
scroller = TRUE
))
}
)
Run Code Online (Sandbox Code Playgroud)
另外如果我只运行R中的这部分代码并在查看器中获取数据表,我能够复制所有行,甚至可能如何?
library("DT")
datatable(
iris,
extensions = 'Buttons', options = list(
dom = 'Bfrtip',
buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
)
)
Run Code Online (Sandbox Code Playgroud)
我尝试过不同的方法:
scrollY =在选项列表中更改... - >它正在工作,但scrollY实际显示所有数据行的数量必须很大,因此可以完全下载 …
TL; DR:如何在非活动选项卡上强制绘制数据表但其输入更改?
有一个闪亮的应用程序看起来像这样:
library(shiny)
library(DT)
shinyApp(
ui = fluidPage(
sidebarLayout(
sidebarPanel(
numericInput(
inputId = "random_val",
label = "pick random value",
value = 1
)
),
mainPanel(
tabsetPanel(
id = "tabset",
tabPanel(
title = "some_other_tab",
"Some other stuff"
),
tabPanel(
title = "test_render",
textOutput("echo_test"),
DTOutput("dt_test")
)
)
)
)
),
server = function(input, output) {
output$echo_test <- renderText({
cat("renderText called \n")
input$random_val
})
outputOptions(output, "echo_test", suspendWhenHidden = FALSE)
output$dt_test <- renderDT({
cat("renderDT called \n")
df <- data.frame(
a = 1:10^6,
b …Run Code Online (Sandbox Code Playgroud)