R Shiny:在 ObserveEvent 中更新代理 table 列 headers
R Shiny: Updating proxy table column headers in ObserveEvent
我想更新 R Shiny 代理 table 中的列 headers。该应用应该:
- 使用原始列 header 名称启动(例如“Do”、“Re”、“Mi”、“Fa”、“So”)
- 当用户单击操作按钮(例如“y1”、“y2”、“y3”、“y4”、 “y5”)
Shiny 有一个方便的 updateCaption() 方法,允许代理 table 字幕的类似行为。我想对代理 tables 的 table 列 headers 做类似的事情。这是我的尝试。
library(shiny)
library(DT)
ui <- fluidPage(
fluidRow(
actionButton(
"updatebutton",
label = "Update Table",
style = "margin-right: 5px;"
),
DT::dataTableOutput("myplot")
),
)
server <- function(input, output) {
mycolumnnames <-c("Do","Re","Mi","Fa","So")
myothercolumnnames <- c("y1","y2","y3","y4","y5")
output$myplot <- DT::renderDataTable({
DF <- data.frame(replicate(5, sample(rnorm(5), 10, rep = TRUE)))
datatable(DF, colnames = mycolumnnames,
caption="Original caption")
})
proxy <- DT::dataTableProxy("myplot")
observeEvent(input$updatebutton, {
updateCaption(proxy, caption="Look, I am a NEW caption!")
DF <- data.frame(replicate(5, sample(rnorm(5), 10, rep = TRUE)))
# names(DF) <- myothercolumnnames # This doesn't work
proxy %>% replaceData(DF)
})
}
shinyApp(ui = ui, server = server)
Edit1:现在使用 dataTableProxy()
我去掉了所有与颜色背景相关的东西,这样我就可以专注于你的问题了。
首先,我在 shiny 之外声明了一些值:您的 data.frame 和两个用于列名的向量。然后我将列名指定为第一个向量。
在应用程序中,我将数据检索为 reactiveVal()
,并在按下按钮时更新其 colnames
library(shiny)
library(DT)
mycolumnnames <-c("Do","Re","Mi","Fa","So")
myothercolumnnames <- c("y1","y2","y3","y4","y5")
DF <- data.frame(replicate(5, sample(rnorm(5), 10, rep = TRUE)))
colnames(DF) <- mycolumnnames
ui <- fluidPage(
fluidRow(
actionButton(
"updatebutton",
label = "Update Table",
style = "margin-right: 5px;"
),
DT::dataTableOutput("myplot")
),
)
server <- function(input, output) {
df <- reactiveVal(DF)
output$myplot <- DT::renderDataTable({
datatable(df(), caption="Original caption")
})
observeEvent(input$updatebutton, {
new_data <- data.frame(replicate(5, sample(rnorm(5), 10, rep = TRUE)))
if(!input$updatebutton %% 2 == 0 ){
colnames(new_data) <- myothercolumnnames
} else {
colnames(new_data) <- mycolumnnames
}
df(new_data)
proxy1 <- DT::dataTableProxy("myplot")
updateCaption(proxy1, caption="Look, I am a NEW caption!")
replaceData(proxy1, df())
})
}
shinyApp(ui = ui, server = server)
因此,无论何时按下按钮,两个向量之间的列名都会发生变化。
我想更新 R Shiny 代理 table 中的列 headers。该应用应该:
- 使用原始列 header 名称启动(例如“Do”、“Re”、“Mi”、“Fa”、“So”)
- 当用户单击操作按钮(例如“y1”、“y2”、“y3”、“y4”、 “y5”)
Shiny 有一个方便的 updateCaption() 方法,允许代理 table 字幕的类似行为。我想对代理 tables 的 table 列 headers 做类似的事情。这是我的尝试。
library(shiny)
library(DT)
ui <- fluidPage(
fluidRow(
actionButton(
"updatebutton",
label = "Update Table",
style = "margin-right: 5px;"
),
DT::dataTableOutput("myplot")
),
)
server <- function(input, output) {
mycolumnnames <-c("Do","Re","Mi","Fa","So")
myothercolumnnames <- c("y1","y2","y3","y4","y5")
output$myplot <- DT::renderDataTable({
DF <- data.frame(replicate(5, sample(rnorm(5), 10, rep = TRUE)))
datatable(DF, colnames = mycolumnnames,
caption="Original caption")
})
proxy <- DT::dataTableProxy("myplot")
observeEvent(input$updatebutton, {
updateCaption(proxy, caption="Look, I am a NEW caption!")
DF <- data.frame(replicate(5, sample(rnorm(5), 10, rep = TRUE)))
# names(DF) <- myothercolumnnames # This doesn't work
proxy %>% replaceData(DF)
})
}
shinyApp(ui = ui, server = server)
Edit1:现在使用 dataTableProxy()
我去掉了所有与颜色背景相关的东西,这样我就可以专注于你的问题了。
首先,我在 shiny 之外声明了一些值:您的 data.frame 和两个用于列名的向量。然后我将列名指定为第一个向量。
在应用程序中,我将数据检索为 reactiveVal()
,并在按下按钮时更新其 colnames
library(shiny)
library(DT)
mycolumnnames <-c("Do","Re","Mi","Fa","So")
myothercolumnnames <- c("y1","y2","y3","y4","y5")
DF <- data.frame(replicate(5, sample(rnorm(5), 10, rep = TRUE)))
colnames(DF) <- mycolumnnames
ui <- fluidPage(
fluidRow(
actionButton(
"updatebutton",
label = "Update Table",
style = "margin-right: 5px;"
),
DT::dataTableOutput("myplot")
),
)
server <- function(input, output) {
df <- reactiveVal(DF)
output$myplot <- DT::renderDataTable({
datatable(df(), caption="Original caption")
})
observeEvent(input$updatebutton, {
new_data <- data.frame(replicate(5, sample(rnorm(5), 10, rep = TRUE)))
if(!input$updatebutton %% 2 == 0 ){
colnames(new_data) <- myothercolumnnames
} else {
colnames(new_data) <- mycolumnnames
}
df(new_data)
proxy1 <- DT::dataTableProxy("myplot")
updateCaption(proxy1, caption="Look, I am a NEW caption!")
replaceData(proxy1, df())
})
}
shinyApp(ui = ui, server = server)
因此,无论何时按下按钮,两个向量之间的列名都会发生变化。