2016-03-21 88 views
1

我有140 renderUI我想分配給對象。你可以手動執行此操作是這樣的:在Shiny R中使用paste0函數中的輸入表達式

Filter1 <- input$Filter1 
... 
Filter140 <- input$Filter140 

我想有這樣的更加自動化,但我不能讓input$Filter1:在paste0input$Filter140。我試過這個:

Filters<-c() 
for(i in 1:140){ 
    Filters<-c(paste0('Filter',i),Filters) 
} 
for(i in Filters){ 
assign(i,input[[paste0(i)]]) 
} 

我從this other SO question部分得到。但它不工作.. 任何幫助將受到歡迎。

ps。讓我知道你是否需要一個完整的ui.rserver.r的例子。雖然我認爲這是足夠的信息。

+1

這可能是微不足道的,但您使用的代碼下部區段一資「F」,並在代碼的較高塊較低的情況下,「F」。它是否說它找不到'filter1'? – giraffehere

+0

謝謝,我很快就寫了第一個代碼塊,但它不會導致我的錯誤。我做了編輯。 –

+1

你在哪裏需要'Filterx'?你可以通過調用'input [[paste0(Filter,x)]]'來調用'Filterx'嗎? –

回答

0

因此,我認爲assign不按照您希望的方式使用數據幀。試試這個:

Filters <- c() 
input <- data.frame(x = "") 
for (i in 1:140) { 

    Filters <- c(paste0('Filter', i), Filters) 

} 

tail(Filters) 
head(Filters) 

for (i in Filters) { 

    input[[i]] <- i 

} 

input <- input[, -1] 

如果你想在相反的方向上產生的列,更改行:

Filters <- c(paste0('Filter', i), Filters) 

Filters <- c(Filters, paste0('Filter', i)) 
+0

輸入不是'data.frame',它是用Shiny創建的。你確定它應該與那個一起工作? –

+0

我需要Filter1到Filter140的對象,而不是'data.frame'中的所有值。 –

+0

@Tim_Utrecht嗯,好的,我對閃亮不完全熟悉,但輸入某種你可以訪問的數組?語法看起來與數據框非常相似。而且,你是否得到任何錯誤? – giraffehere

0

調查多一點它沒有經過似乎與assign()input[[paste0(i)]]功能: ui.r:

library(shiny) 

shinyUI(fluidPage(

    # Application title 
    titlePanel("Old Faithful Geyser Data"), 

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
    sidebarPanel(
     sliderInput("bins", 
        "Number of bins:", 
        min = 1, 
        max = 50, 
        value = 30) 
    ), 


    # Show a plot of the generated distribution 
    mainPanel(
     selectInput("Filter1","Filter1",choices = c("A","B","C"),selected = "A"), 
     selectInput("Filter2","Filter2",choices = c("AB","BC","CD"),selected = "AB"), 
     selectInput("Filter3","Filter3",choices = c("ABC","BCD","CDF"),selected = "ABC"), 
     plotOutput("distPlot") 
    ) 
) 
)) 

server.r:

library(shiny) 

shinyServer(function(input, output) { 

    output$distPlot <- renderPlot({ 

    # generate bins based on input$bins from ui.R 
    x <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins + 1) 
    #Filter1<-input$Filter1 
    #print(Filter1) 
    #print(input$Filter2) 
    for(i in c("Filter1","Filter2","Filter3")){ 
    #Filter3 <- input[[paste0('Filter3')]] 
    assign(i,input[[paste0(i)]]) 
     print(get(i)) 
    } 
    # draw the histogram with the specified number of bins 
    hist(x, breaks = bins, col = 'darkgray', border = 'white') 



    }) 

})