我在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))
但是我有这样的错误信息:
警告:'闭包'类型的$:对象中的错误不是子集
我该怎么办?
答案 0 :(得分:3)
selection1
是reactive
函数。在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"