2016-10-31 1 views
2

내 Server.R이 코드를 가지고 :어떤 종류의 객체입니까, 반응합니까?

selection1 <- reactive({filter(filter(DF1, PC %in% input$dynamic), 
        AGE >= input$age[1] & AGE <= input$age[2])}) 

DF1 물론 데이터 프레임 개체입니다, input$dynamic가 checkboxGroupInput하고 input$age이 슬라이더 입력합니다. 그러나 어떤 종류의 객체가 selection1입니까? 그것도 데이터 프레임인가?

그럼 난 selection1에 변수 COMMUN에서 유일 발생 수를 계산하기 좋아하는 것, 그래서 나는이 시도 :

selection2 <- length(unique(selection1$COMMUN)) 

을하지만이 오류 메시지가 :

경고 : 오류 $에서 : 'closure'유형의 객체는 서브셋이 아님

어떻게이 작업을 수행 할 수 있습니까?

답변

3

selection1reactive 함수입니다. Shiny에서 이는 데이터를 저장/캐싱하는 함수임을 의미합니다. 보유하고있는 데이터는 함수를 호출 할 때 업데이트되고 입력이 변경 될 때 업데이트됩니다. 호출 할 때 입력 값이 변경되지 않으면 캐시 된 데이터를 반환합니다.

데이터에 액세스하려면 selection1()을 사용하여 함수 자체를 호출 한 다음 데이터를 서브 세트하기위한 일반적인 기능/코드를 따라야합니다. 따라서 귀하의 경우에 당신이 사용하여 함수를 호출하지 않고, 함수에 $ 작업을 수행하려고 할 때 당신이보고있는 오류가 표준 오류가

selection2 <- length(unique(selection1()$COLUMN)) 

을 것 ()

foo <- function(){ 
    bar = data.frame(bar = c(1,2,3)) 
} 

foo$bar 
Error in foo$bar : object of type 'closure' is not subsettable 

foo()$bar 
[1] 1 2 3 

reactive 개체의 구조에 대한 실제 세부 정보를 보려면 을 호출하여보십시오.

foo <- reactive() 

str(foo) 

function() 
- attr(*, "observable")=Classes 'Observable', 'R6' <Observable> 
    Public: 
    .dependents: environment 
    .domain: NULL 
    .error: FALSE 
    .execCount: 0 
    .func: function (...) 
    .invalidated: TRUE 
    .label: foo 
    .mostRecentCtxId: 
    .running: FALSE 
    .updateValue: function() 
    .value: NULL 
    .visible: 
    clone: function (deep = FALSE) 
    getValue: function() 
    initialize: function (func, label = deparse(substitute(func)), domain = getDefaultReactiveDomain(), 
    self: Observable, R6 
- attr(*, "class")= chr "reactive" 
+0

안녕하세요. SymbolixAU, 답변 해 주셔서 감사합니다. 그냥 한 번만 더 질문하십시오. 변수 PC == "01"에서 selection1을 필터링해야합니다. 같은 줄에 selection2 길이/고유 기준으로 selection1 필터를 사용하여 더 짧은 코드를 사용할 수 있습니까? 나는 그것을 할 수 없었습니다. 고맙습니다. –

+0

@Mickey_NC - 당신이 묻는 것을 이해하지 못합니다. 'selection1() [PC == "01", "COLUMN"]'을 의미합니까? – SymbolixAU

+0

변수 PC = "01"에서 selection1을 필터링 한 다음 길이 (unique (selection1 $ COMMUN))를 가져와 가능한 경우 이러한 "필터"+ "길이/고유"지침을 수행해야합니다. 더 짧은 코드를 얻기 위해 같은 줄 (selection2 <-)을 사용해야합니다. selection =에 PC = "01"~ "33"이 있는지 확인해야합니다. 그것이 이해할 수 있기를 바랍니다. 고마워. –

관련 문제