如何在 R Shiny 中以文本形式打印出 rpart 树结果

How to print out a rpart tree result in text in Rshiny

您可以使用以下命令轻松地在 R 控制台中以文本形式打印出 rpart 树结果。

fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
print(fit)

然后打印出来:

n= 81

node), split, n, loss, yval, (yprob) * denotes terminal node

1) root 81 17 absent (0.79012346 0.20987654) 2) Start>=8.5 62 6 absent (0.90322581 0.09677419)
4) Start>=14.5 29 0 absent (1.00000000 0.00000000) * 5) Start< 14.5 33 6 absent (0.81818182 0.18181818)
10) Age< 55 12 0 absent (1.00000000 0.00000000) * 11) Age>=55 21 6 absent (0.71428571 0.28571429)
22) Age>=111 14 2 absent (0.85714286 0.14285714) * 23) Age< 111 7 3 present (0.42857143 0.57142857) * 3) Start< 8.5 19 8 present (0.42105263 0.57894737) *

但是,这在 Rshiny textOutput 中不起作用。
请参阅以下 Rshiny 代码:

ui.r

library(shiny)

# Define UI for application that draws a histogram
shinyUI(fluidPage(

  # Application title
    # Show a plot of the generated distribution
    mainPanel(
      plotOutput("distPlot"),
      textOutput("distText")
    )
  )
)

server.r

library(shiny)
library(rpart)
# Define server logic required to draw a histogram
shinyServer(function(input, output) {
  output$distText <- renderText({
    fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
    print(fit)
  })
})

如果我运行上面闪亮的APP,它给出以下错误:

Error in cat(list(...), file, sep, fill, labels, append) :
argument 1 (type 'list') cannot be handled by 'cat'

您可以使用capture.output(fit)获取打印函数输出的字符串。 您可能还想将 ui.R 中的 textOutput 更改为 htmlOutput。这使您可以输出多行文本。

代码应该是这样的: server.R

library(shiny)
library(rpart)
# Define server logic required to draw a histogram
shinyServer(function(input, output) {

        output$distText <- renderText({
                fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
                paste(capture.output(fit),collapse="<br>")


        })
})

ui.R

library(shiny)

# Define UI for application that draws a histogram
shinyUI(fluidPage(

        # Application title
        # Show a plot of the generated distribution
        mainPanel(
                plotOutput("distPlot"),
                htmlOutput("distText")
        )
)
)