R使用assign()循环播放renderUI输入不起作用;硬编码

时间:2015-10-13 04:31:52

标签: r shiny assign

我试图避免使用硬编码来打印10个文本输入的输入。

用户基本上会输入生成相应SQL代码作为文本的关键字。

SERVER.R

代码块1:

所以第一个代码块是创建十个文本输入 - 这些是使用renderUI创建的,并使用uiOutput输出

 output$key1A_depend1 <- renderUI({
      lapply(1:5, function(i){
        textInput(paste0("key1_temp_",i),label=paste0(i),paste0(""))
      })#END lapply 
    })#END renderUI

    output$key1A_depend2 <- renderUI({
      lapply(6:10, function(i){
        textInput(paste0("key1_temp_",i),label=paste0(i),paste0(""))
      })#END lapply
    })#END renderUI

    # THE ABOVE WORKS FINE

代码块2:

然后,第二个代码块根据文本输入中输入的内容分配基于文本的输出。如果文本输入中没有输入任何内容,则这些符合“”或不符合文本。

output$key1A_main <- output$key1A_maincopy <- output$key1A_maincopy2 <- renderUI({ 

  for (i in 1:10){

    xy <- eval(parse(text=paste0("input$key_temp_",i)))

    assign(paste0("key1A_out_",i), 
           if(!is.null(xy)) {
             paste0("Details like '%",xy,"%' or ",br())
           }  
           else paste0(" ")
    )

  }#END for

# HARD CODING THE ABOVE INTO 10 SEPARATE STATEMENTS ALSO WORKS, JUST NOT IN THE FOR LOOP

代码块3:

第三个代码块生成实际输出,整理第二个代码块中生成的所有输出。

HTML(paste0(  key1A_start
                key1A_out_1
                , key1A_out_2
                , key1A_out_3
                , key1A_out_4
                , key1A_out_5
                , key1A_out_6
                , key1A_out_7
                , key1A_out_8
                , key1A_out_9
                , key1A_out_10)) 

})#END renderUI`enter code here`

# THE OUTPUT GENERATED RETURNS BLANKS for Kkey1A_out_1, 2, 3 …. , 10.

然而,当我对代码块2进行硬编码时,它完美地运行

备用代码块2:

key1A_out_1 <- 
if(nchar(input$key1_temp_1)>0) 
    {paste0("Details like '%",input$key1_temp_1,"%' OR ",br())  } 
else 
{paste0(" ") }

# REPEATED 10 times

任何帮助都会受到赞赏,它可能是一个范围问题,也可能只是一个()没有做好的事情。

1 个答案:

答案 0 :(得分:0)

这看起来像一个简单的错误,其中变量名称错误。 应该是中的“key1”

xy <- eval(parse(text=paste0("input$key1_temp_",i)))

但是,您可以简化代码块2和3,并使用

删除assigneval(parse业务(两者都应该避免)
output$key1A_main <- output$key1A_maincopy <- output$key1A_maincopy2 <- renderUI({
    HTML(
        lapply(1:10, function(i) {
            xy <- input[[sprintf("key1_temp_%d", i)]]
            if (!is.null(xy)) paste0("Details like '%", xy, "%' or ", br())
            else " "
        })
    )
})