我有一个简单的闪亮应用程序:
#ui.r
navbarPage(
"Application",
tabPanel("General",
sidebarLayout(
sidebarPanel(
uiOutput("tex2"),
uiOutput("book3"),
uiOutput("book6")
),
mainPanel(
DT::dataTableOutput("hot3")
)
)))
#server.r
library(shiny)
library(DT)
server <- function(input, output,session) {
output$tex2<-renderUI({
numericInput("text2","#tests",
value = 1,
min=1
)
})
output$book3<-renderUI({
selectInput("bk3",
"Label",
choices=(paste("Test",1:input$text2)))
})
output$book6<-renderUI({
textInput("bk6", "Change to",
value=NULL
)
})
rt4<-reactive({
if(is.null(input$bk6)){
DF=data.frame(
Label=paste("Test",1:input$text2),
stringsAsFactors = FALSE)
}
else{
DF=data.frame(
Label=paste("Test",1:input$text2),
stringsAsFactors = FALSE)
DF[DF==input$bk3]<-input$bk6
DF
}
})
output$hot3 <-DT::renderDataTable(
rt4(),
selection=list(mode="single")
)
}
您可以看到,每次numericInput()
“测试”我都会添加一行。然后,我使用selectInput()
“标签”选择其中一种测试。选择测试后,我用第三个textInput()
“更改为”将其重命名。
问题是我希望我的textInput()
默认为空。因此,如果此字段为空,则数据表中的“标签”应使用Label=paste("Test",1:input$text2)
来命名为normaly,而不应原样为空。
例如,最初加载应用程序时,第一行中的标签应为“测试1”,而不是null。
答案 0 :(得分:1)
发生问题是因为您的初始化为NULL,但是调用input$bk6
时,它不是NULL而是空字符""
。您可以通过对响应数据框执行以下类似操作来解决此问题。注意对is.null(input$bk6)|input$bk6==""
rt4<-reactive({
if(is.null(input$bk6)|input$bk6==""){
DF=data.frame(
Label=paste("Test",1:input$text2),
stringsAsFactors = FALSE)
}
else{
DF=data.frame(
Label=paste("Test",1:input$text2),
stringsAsFactors = FALSE)
DF[DF==input$bk3]<-input$bk6
DF
}
})
但是,您可能要进行初始化以解决此问题。诸如此类的内容可能会消除您在启动过程中收到的一些警告。
#ui.r
navbarPage(
"Application",
tabPanel("General",
sidebarLayout(
sidebarPanel(
uiOutput("tex2"),
uiOutput("book3"),
uiOutput("book6")
),
mainPanel(
DT::dataTableOutput("hot3")
)
)))
#server.r
library(shiny)
library(DT)
server <- function(input, output,session) {
output$tex2<-renderUI({
numericInput("text2","#tests",
value = 1,
min=1
)
})
output$book3<-renderUI({
if(!is.null(input$text2)){
selectInput("bk3",
"Label",
choices=(paste("Test",1:input$text2)))
}})
output$book6<-renderUI({
textInput("bk6", "Change to",
value=""
)
})
rt4<-reactive({
if(!is.null(input$bk6)){
if(input$bk6==""){
DF=data.frame(
Label=paste("Test",1:input$text2),
stringsAsFactors = FALSE)
}
else{
DF=data.frame(
Label=paste("Test",1:input$text2),
stringsAsFactors = FALSE)
DF[DF==input$bk3]<-input$bk6
DF
}
}
})
output$hot3 <-DT::renderDataTable(
rt4(),
selection=list(mode="single")
)
}