有条件的 RenderUI R 有光泽
conditional RenderUI R shiny
我有一个关于 renderUI 的问题,我无法在任何地方找到解决方案。可能我向 google 提出了错误的问题,而不仅仅是一个闪亮的问题是一个基本的 R 问题。
我在 R 中有一个函数,根据输入将 return 一个 table 或一个文本。所以我以这种方式在 server.R 中创建了两个选项:
output$table <- renderTable {(
x <- function (y)
print(x)
)}
output$text <- renderText {(
x <- function (y)
print(x)
)}
如果我将两个输出都放在 renderUI 中,一个总是会给我一个错误。在 textOutput 的情况下,如果输出是 table:
Error: argument 1 (type 'list') cannot be handled by 'cat'
和
Error:no applicable method for 'xtable' applied to an object of class "character"
如果反之亦然。
我的问题是有没有办法捕获此错误并在 renderUI 中使用 if 语句仅显示两者之一?
如果您需要,我会在这里为您提供更多详细信息。
[编辑]
server.R
library(shiny)
library(drsmooth)
shinyServer(function(input, output,session) {
-- upload dataframe and input management goes here --
output$nlbcd <- renderTable({
nlbcd<-nlbcd(dosecolumn="Dose", targetcolumn=response(),cutoffdose=cutoff(),data=data1())
print(nlbcd)
})
output$nlbcdText <- renderText({
nlbcd<-nlbcd(dosecolumn="Dose", targetcolumn=response(),cutoffdose=cutoff(),data=data1())
print(nlbcd)
})
output$tb <- renderUI({
tableOutput("nlbcd"),
textOutput("nlbcdText")
})
})
我会尝试使用函数 class()
。
output$table <- renderTable {(
x <- function (y)
if(class(x) == "table")
print(x)
)}
output$text <- renderText {(
x <- function (y)
if(class(x) == "list")
print(x)
)}
您这里有一些问题,该函数将 return 不同 类,包括错误和警告以及解释。这是此函数可能发生的情况的独立示例,我们鼓励您在代码中包含 TryCatch:
ui.R
shinyUI(
pageWithSidebar(
headerPanel("drsmooth"), sidebarPanel(
numericInput("num", label = h3("Choose 'cutoffdose'"), value = 0)
),
mainPanel(
verbatimTextOutput('current')
)
)
)
server.R
library(drsmooth)
shinyServer(function(input, output, session) {
output$current <- renderPrint({
dose <- input$num
tryCatch(isolate(nlbcd("dose", "MF_Log", cutoffdose=dose, data=DRdata)),
error=function(e) {
cat(isolate(conditionMessage(e)))
}
)
})
})
示例输出:
我有一个关于 renderUI 的问题,我无法在任何地方找到解决方案。可能我向 google 提出了错误的问题,而不仅仅是一个闪亮的问题是一个基本的 R 问题。
我在 R 中有一个函数,根据输入将 return 一个 table 或一个文本。所以我以这种方式在 server.R 中创建了两个选项:
output$table <- renderTable {(
x <- function (y)
print(x)
)}
output$text <- renderText {(
x <- function (y)
print(x)
)}
如果我将两个输出都放在 renderUI 中,一个总是会给我一个错误。在 textOutput 的情况下,如果输出是 table:
Error: argument 1 (type 'list') cannot be handled by 'cat'
和
Error:no applicable method for 'xtable' applied to an object of class "character"
如果反之亦然。
我的问题是有没有办法捕获此错误并在 renderUI 中使用 if 语句仅显示两者之一? 如果您需要,我会在这里为您提供更多详细信息。
[编辑]
server.R
library(shiny)
library(drsmooth)
shinyServer(function(input, output,session) {
-- upload dataframe and input management goes here --
output$nlbcd <- renderTable({
nlbcd<-nlbcd(dosecolumn="Dose", targetcolumn=response(),cutoffdose=cutoff(),data=data1())
print(nlbcd)
})
output$nlbcdText <- renderText({
nlbcd<-nlbcd(dosecolumn="Dose", targetcolumn=response(),cutoffdose=cutoff(),data=data1())
print(nlbcd)
})
output$tb <- renderUI({
tableOutput("nlbcd"),
textOutput("nlbcdText")
})
})
我会尝试使用函数 class()
。
output$table <- renderTable {(
x <- function (y)
if(class(x) == "table")
print(x)
)}
output$text <- renderText {(
x <- function (y)
if(class(x) == "list")
print(x)
)}
您这里有一些问题,该函数将 return 不同 类,包括错误和警告以及解释。这是此函数可能发生的情况的独立示例,我们鼓励您在代码中包含 TryCatch:
ui.R
shinyUI(
pageWithSidebar(
headerPanel("drsmooth"), sidebarPanel(
numericInput("num", label = h3("Choose 'cutoffdose'"), value = 0)
),
mainPanel(
verbatimTextOutput('current')
)
)
)
server.R
library(drsmooth)
shinyServer(function(input, output, session) {
output$current <- renderPrint({
dose <- input$num
tryCatch(isolate(nlbcd("dose", "MF_Log", cutoffdose=dose, data=DRdata)),
error=function(e) {
cat(isolate(conditionMessage(e)))
}
)
})
})
示例输出: