我在shiny中设置了这个反应变量。
v <- reactive({
var <- switch(input$var,
Centers = centers,
Homes = homes,
homes)它引用了这两个调查设计对象,它们是根据未加权的子集数据创建的。
centers <- svydesign(id=~HH9_METH_VPSUPU,
strata=~HH9_METH_VSTRATUMPU,
weights=~HH9_METH_WEIGHT,
data=ucenters)
homes <- svydesign(id=~HH9_METH_VPSUPU,
strata=~HH9_METH_VSTRATUMPU,
weights=~HH9_METH_WEIGHT,
data=uhomes)但是,在tabPanels中,在华夫图中引用它们的结果参差不齐。在下面的队伍里。
# Flexibility ----
output$C14A_5 <- renderPlot({
wvals <- round((as.data.frame(prop.table((svytable(~v()$variables$HH9_C14A_5_FLEX, v()))))$Freq*100), digits = 0)
val_names <- sprintf("%s (%s)", vallabels, scales::percent(round(wvals/sum(wvals), 2)))
names(wvals) <- val_names
waffle::waffle(wvals, title="Importance of flexibility")
})我能够在设计字段中获得v()的第二个实例,但是第一个实例给出了一个“未能找到函数”“v”的错误。
在同样的例子中,我也尝试了svytable(~v[‘变量’][‘HH9_C14A_5_FLEX’]),但这告诉我"object 'v‘not found“。
我也试过在呼叫之外指定这个,如下所示.
# Flexibility ----
output$C14A_5 <- renderPlot({
dataset <- v()
wvals <- round((as.data.frame(prop.table((svytable(~dataset()$variables$HH9_C14A_5_FLEX, v()))))$Freq*100), digits = 0)
val_names <- sprintf("%s (%s)", vallabels, scales::percent(round(wvals/sum(wvals), 2)))
names(wvals) <- val_names
waffle::waffle(wvals, title="Importance of flexibility")
})但这给了我“对象‘数据集’找不到”。显然,如果我尝试使用[[而不是$ ]),也是一样的。
我也尝试过使用paste0,但我遇到了与上面相同的问题。
还有什么我可以试试的吗?还有另一种方法可以调用反应性变量来调用它的特性吗?当然有办法做到这一点!
发布于 2022-08-16 15:48:04
使用字符串和as.formula将其转换为公式。
例如,公式~x与as.formula("~x")相同。
因此,如果在反应性变量X中有一个字符串,则可以执行as.formula(paste0("~", X()))。
https://stackoverflow.com/questions/73368110
复制相似问题