0
我有光泽的应用程序等如下所示:如何根据下拉输入动态地重命名R Shiny中的多列?
require(shiny)
require(dplyr)
server <- function(input, output) {
dataa <- reactive({
table1 <- mtcars
return(table1)
})
output$contents <- renderDataTable({
dataa()
})
output$mpg <- renderUI({
selectizeInput(
'MPG', 'MPG: ', choices = c("",as.list(colnames(dataa()))),
options = list(
placeholder = 'Please select',
onInitialize = I('function() { this.setValue(""); }')
)
)
})
output$cyl <- renderUI({
selectizeInput(
'CYL', 'CYL: ', choices = c("",as.list(colnames(dataa()))),
options = list(
placeholder = 'Please select',
onInitialize = I('function() { this.setValue(""); }')
)
)
})
DataRename <- reactive({
Data <- dataa()
DataNew1<-Data
MPG <- input$MPG
CYL <- input$CYL
if(!is.null(MPG)){
StatRenameEmp1 <- paste0("DataNew1 <- dplyr::rename(DataNew1,Mileage=",MPG,")")
eval(parse(text=StatRenameEmp1))
} else{
DataNew1<-Data
}
if(!is.null(CYL)){
StatRenameEmp1 <- paste0("DataNew1 <- dplyr::rename(DataNew1,Cylinders=",CYL,")")
eval(parse(text=StatRenameEmp1))
}else{
DataNew1<-Data
}
return(DataNew1)
})
output$rename <- renderDataTable({
DataRename()
})
}
ui <- shinyUI({
navbarPage("Dynamic Rename",
tabPanel("Data",
fluidPage(
titlePanel("mtcars"),
dataTableOutput('contents'))
),
tabPanel("Variables",
fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput("mpg"),
uiOutput("cyl")
),
mainPanel(
dataTableOutput("rename")
)
)
)
)
)
})
shinyApp(ui = ui, server = server)
目的是重命名数据帧(mtcars)其中,I具有给定的最终数据的一些标准名称,并且用户应该选择的列来自输入数据集的相应变量。例如,我想将用户选择的某个列(本例中为mpg
)重命名为“里程”,将cyl
重命名为“Cylinder”等。
我的问题是我无法重新命名多个列。只有第一列正在重命名,而不是剩下的。
其次,我可能不会选择任何列,在这种情况下,列名不必改变,也就是说,如果没有选择MPG那么就应该继续作为mpg
我如何获得的所有列根据改名到我设定的名字,基于用户输入?
如果我选择所有下拉列表,则重命名会很好。