我试图避免使用硬编码来打印10个文本输入的输入。
用户基本上会输入生成相应SQL代码作为文本的关键字。
所以第一个代码块是创建十个文本输入 - 这些是使用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
然后,第二个代码块根据文本输入中输入的内容分配基于文本的输出。如果文本输入中没有输入任何内容,则这些符合“”或不符合文本。
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
第三个代码块生成实际输出,整理第二个代码块中生成的所有输出。
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进行硬编码时,它完美地运行
key1A_out_1 <-
if(nchar(input$key1_temp_1)>0)
{paste0("Details like '%",input$key1_temp_1,"%' OR ",br()) }
else
{paste0(" ") }
# REPEATED 10 times
任何帮助都会受到赞赏,它可能是一个范围问题,也可能只是一个()没有做好的事情。
答案 0 :(得分:0)
这看起来像一个简单的错误,其中变量名称错误。 但是,您可以简化代码块2和3,并使用xy <- eval(parse(text=paste0("input$key1_temp_",i)))
assign
和eval(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 " "
})
)
})