2016-07-07 6 views
2

이것은 다른 곳에서 플롯되고있는 값의 위쪽 또는 아래쪽 10을 보여주는 요약 블록의 모형입니다.반짝이는 반응 형 드롭 다운 (숫자 입력 사용)

ISSUE

변수 이름을 변경하거나 정렬 방향이 잘 작동하지만, 데이터를 표시하는 방법에 많은 한계 (limit1)을 변경, 작품 처음에 10을 표시하지만, 덜 5처럼 변경 보여주는 끝 모든 데이터. 높은 값으로 변경하는 것이 가끔은 효과가 있지만 항상 그렇지는 않습니다. 그것은 매우 이상하다!

그래서 OK

Deafult app on startup

확인하지

는 0,123,243의 부분 집합에 문제가 App when choose 5

CODE

library(shiny) 
library(data.table) 

dataset1 <- as.data.table(iris) 

server <- function(input, output) { 
# Top table 
    datatop1 <- reactive({ 

    dt <- copy(dataset1) 
    setorderv(dt,input$t1, input$sort1) # -1 is descending 

    # choose subset of rows 
    row.limit <- min(nrow(dataset1), input$limit1) 
    dt <- dt[1:row.limit, ] 

    # choose columns 
    dt <- dt[, .(Species, get(input$t1))] 
    setnames(dt,"V2",input$t1) 

    return(dt) 
    }) 

    output$top1 <- renderUI({ 
    if(!is.null(dataset1)) { 

     fluidRow(inputPanel(
     selectInput("limit1", "Limit:", 
        c("5", "10", "15", "20", "25", "50"), 
        selected = "10"), 
     selectInput(("t1"), "Variable:", choices = names(dataset1), 
        selected = "Sepal.Length"), 
     selectInput("sort1", "Sort by:", 
        choices = c('Bottom/Asc.' = +1 , 'Top/Desc.' = -1), 
        selected = -1) 
    )) 
    } 
    }) 


    # Top panel 
    output$screenTop1 <- renderTable({  
    # top dataset is in reactive as function 
    datatop1() 
    }) 
    output$screenTop <- renderUI({ 
    tagList(
     uiOutput("top1"), 
     uiOutput("screenTop1") 
    ) 
    }) 
} 

ui <- shinyUI(
    fluidPage(tabPanel("Top", uiOutput("screenTop")) 
) 
) 

shinyApp(ui=ui, server = server) 

인가? 아니면 반응이있는 방식을 사용하고 있습니까? 빛나는 전문가 - 내가 뭘 잘못하고 있는지, 왜 내가 아직 반응성을 완전히 파악하지 못했는지에 대해 조종사는 감사 할 것입니다. 사과 코드는 주 코드가 다른 파일 구조 안에 있기 때문에 조금 복잡한 코드입니다.

> sessionInfo() 
R version 3.2.4 Revised (2016-03-16 r70336) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows >= 8 x64 (build 9200) 

locale: 
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C       
[5] LC_TIME=English_United Kingdom.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] data.table_1.9.6 shiny_0.13.2 

편집 : 설명 아래

@Pork 잘라의 좋은 의견은 min 문자로 모두를 강요 끝날 수 있다는 것을 설명한다. 그래서 226과 5에 직면했을 때 "226"과 "5"의 테스트가되었고 엘리먼트 단위로 "2"가 "5"를이기므로 "226"이 최소로 선택되었고 모든 행은 그림과 같이 나타납니다.

그러나 10 및 20에 대해서는 예를 들어 없습니다. "226"과 "10"첫 번째 숫자 1 < 2. 올바른 최소값이 표시되었습니다. 레슨 : 시계 유형이며 필요한 경우 SelectInput 입력 $ vars를 as.numeric으로 설정해야합니다.

수수께끼 설명!

답변

4

업데이트처럼 사용하여 집합 :

row.limit <- min(nrow(dataset1), as.numeric(input$limit1))

편집 :min으로

1)를 사용하면 데이터 형식을 수정 cast 필요 제대로 min을 계산하기 위해 numeric 변수를 필요 : as.numeric(input$limit1), 그렇지 않으면 다른 숫자 변수를 사용합니다.

기본적 selectinput으로

2)는 selectize documentation을 읽으면 selectInput()selectizeInput() 당신이 내가 당신을 제안

"Selectize is instantiated from a <input type="text"> element"가 개발에 향후 것을 발견 할 것이다 JavaScript 라이브러리 selectize.js

3)를 사용하여 입력 string이다 validateneed을 최대한 많이 사용하려면 here이라는 설명서를 참조하십시오. 당신이

문자열의 분을 복용 명확히하기 위해 수 또한 많은 print를 사용하려고 : 당신이 ?min를 입력하면

당신이이 문자열에 대한 평가는 발견 할 것이다 다음과

  • 문자열이 컬렉션에있는 경우 전체 세트를 character
  • 유형으로 강제 변환합니다. min 문자열의 정렬이 알파벳 순서를 의미 Lexicographical order을 사용하여 수행됩니다, 이것은 당신이 min(c("10",2))을 경우, 그것은 22 일단은 문자열로 coerced 전에 1"10" 온다 반환된다는 것을 의미합니다
  • 나는 걱정했다
+0

치료를 한 Thanks Pork Chop. ** 이것이 당신을 반나절 동안 미치게 만들었 기 때문에 ** 당신의 대답에 ** 이유를 설명해주십시오. 입력 변수에 항상 유형을 확인해야합니까? 언제해야합니까? – micstr

+0

엑스트라와 팁에 대한 감사 PorkChop. 나는'print'를 사용했고, 때때로 그것은 min으로 226으로 돌아 오는 것을보고 놀랐다. 이상한 것은 어떻게 문자열이 시간의 일부 변환하고 항상 가발하지 않았다. – micstr

+1

대부분의 위대한 프로그래머는 데이터 유형에 대해 다른 어떤 것보다 많은 것을주의해야합니다. –

1

이 작업을 시도 할 수 있습니다 :

# choose subset of rows 
    #row.limit <- min(nrow(dataset1), input$limit1) 
    dt <- dt[1:input$limit1, ] 

그것은 row.limit "계산"하지 않는이 켜지지입니다. 숫자로 직접 포함시킬 수 있습니다.그것은 dt[1:5, ]

+1

로드 된 데이터가 선택된 행보다 작은 경우 데이터 재사용. 즉 데이터 세트에 33 개의 항목이 있고보기 50을 선택합니까? 결국 공백으로 끝납니다. 어떤 이유에서'input $ limit1'에서의 변경이'row.limit'을 다시 계산하지 않고 대신 all을 선택하겠습니까? – micstr

+0

좋은 지적. 마지막 문제는 Pork Chop의 답변을 참조하십시오. – Jimbou