2014-07-21 86 views
2

我已经阅读了使用HTML在Shiny中打印分隔线的各种方法,但并不满意。我的目标是对各种独立变量进行分类,并将代码作为SQL语句提供给用户,然后用户可以在SAS中使用该语句。我希望最终看到印在我的闪亮的应用程序中的文本是从执行代码如下结果:在Shiny中打印文本

binbreaks <- c(17,41,65,89,113) 
x_var <- "IAG01" 

for (i in 1:length(binbreaks)) { 
if (i==1) { 
    cat(paste("select ",x_var, ", case", "\nwhen ", x_var," <= ", binbreaks[1], "then 1")) 
} 
if (i>1 & i<=(length(binbreaks)-1)) { 
    cat(paste("\nwhen ",binbreaks[i-1], " < ", x_var, " <= ", binbreaks[i], "then ", i)) 
} 
if (i==length(binbreaks)) { 
    cat(paste("\nelse ", i)) 
    cat(paste("\nend as ", x_var, "_bin")) 
} 

在我闪亮的应用程序所得到的文本应该是:

select IAG01 , case 
when IAG01 <= 17 then 1 
when 17 < IAG01 <= 41 then 2 
when 41 < IAG01 <= 65 then 3 
when 65 < IAG01 <= 89 then 4 
else 5 
end as IAG01 _bin 

server.R :

shinyServer(function(input, output) { 
    output$SQL_pp <- renderPrint({ 
    binbreaks<-seq(min(input_data_NA[[input$x_var]]),max(input_data_NA[[input$x_var]]),length.out=input$bins) 
    cat(
     for (i in 1:length(binbreaks)) { 
     if (i==1) { 
      cat(paste("select ",input$x_var, ", case", "\nwhen ", input$x_var," <= ", binbreaks[1], "then 1")) 
     } 
     if (i>1 & i<=(length(binbreaks)-1)) { 
      cat(paste("\nwhen ",binbreaks[i-1], " < ", input$x_var, " <= ", binbreaks[i], "then ", i)) 
     } 
     if (i==length(binbreaks)) { 
      cat(paste("\nelse ", i)) 
      cat(paste("\nend as ", input$x_var, "_bin")) 
     } 
     } 
    ) 
    }) 

ui.R:

shinyUI(fluidPage(
    navbarPage("EDA Tool", 
    tabPanel("SQL code", textOutput("SQL_pp")) 
) 
) 

问题是我想打印像上面的输出。相反,我的输出看起来很混乱。它仍然会执行,但我想它看起来像样的(即不是这样:

select IAG01 , case when IAG01 <= 17 then 1 when 17 < IAG01 <= 41 then 2 when 41 < IAG01 <= 65 then 3 when 65 < IAG01 <= 89 then 4 else 5 end as IAG01 _bin 

回答

2

HTML忽略默认换行;你可以使用一个pre元素保留换行符和间距替换此:

textOutput("SQL_pp") 

有了这个:

textOutput("SQL_pp", container = pre) 
+0

这正是我想要谢谢你这么多,在未来,如果我想了解像“容器”的选择和这样的,我怎么会去这样做!那?例如,当我搜索textOutput文档时,container = pre没有在任何地方列出。 – user3780173