这是一个什么样的对象,被动反应?

时间:2016-10-31 02:53:29

标签: r shiny

我在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是什么类型的对象?它也是一个数据框架吗?

然后我想计算COMMUN中变量selection1中唯一出现的次数,所以我尝试了这个:

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

但是我有这样的错误信息:

  

警告:'闭包'类型的$:对象中的错误不是子集

我该怎么办?

1 个答案:

答案 0 :(得分:3)

selection1reactive函数。在Shiny中,这意味着它是一个保存/缓存数据的函数。当您调用函数AND时,它所保存的数据会更新。如果在调用时输入没有改变,它将返回缓存的数据。

要访问您需要使用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对象结构的实际细节,只需在其上调用str并查看

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"