在 R Shiny Dashboard 中的反应函数中返回数据帧

2023-12-29

使用闪亮的仪表板、ui.r、server.r 和多个包含函数的 r 脚本。

基本问题是:我有两个数据集带入 server.r 中,并将它们传递给准备/清理数据集的函数,然后将它们绑定在一起并应返回完整的数据帧。数据帧应该是反应性的。这是我到目前为止所拥有的:

在 server.r 中,我在函数(输入、输出、会话)之前加载数据。然后我有:

################server.r  code #########################
data <- reactive({
   testDF <- prepData(data1, data2)
})

prepData 函数可以执行多种操作,但结尾为:

####################prepData function return#################
 return(rbind(data1, data2))

如果我使用类似的东西:

############## server.r code#######################
value = nrow(data()),

然后代码返回正确的值。不过,我更愿意像使用 testDF 一样返回数据帧。

Shiny 将在未找到对象“testDF”的 UI 中抛出错误。

我尝试通过以下方式进行工作:如何在 R / Shiny 中构建反应式数据框? https://stackoverflow.com/questions/30443625/how-do-i-build-a-reactive-dataframe-in-r-shiny使用代码:

dataR <- prepData(data1, data2)

makeReactiveBinding(dataR)

这仍然会引发错误。该函数显然可以工作并且已经过验证,但是对于使用该函数的反应性组件,我一定有一些不明白的地方。任何帮助,将不胜感激。谢谢!

服务器.ui

function(input, output, session) { 

### PreProcess the Data

data <- reactive({
  testDF <- prepData(bdata, qdata)
})

#dataR <- prepData(bData, qData)

#makeReactiveBinding(dataR)

### Information Box Populations

output$monthlytransactions = renderInfoBox({
infoBox(
  title = "Payments",
  value = nrow(data()),
  icon = icon("comments-dollar"),
  color = "blue"
)
})

output$monthlyGrossDollars = renderInfoBox({
infoBox(
  title = "Payments",
  value = sum(testDF$GrossAmount),
  icon = icon("comments-dollar"),
  color = "blue"
)
})

 }

prepData

############# FUNCTIONS ##############
prepData <- function(beamData, qlawData){ 

##Processing##
#Join DFs
return(rbind(bData, qData))

您可以将反应式表达式视为返回值的函数。所以你得到了object 'testDF' not found错误因为testDF只存在于范围内data反应对象(函数)。

当您创建反应式表达式时:

data <- reactive({
  testDF <- prepData(bdata, qdata)
})

您实际上正在做的是创建一个返回值的函数。在这种情况下,你运行prepData(),将结果保存到对象中testDF然后隐式返回该值(因为 R 隐式返回函数最后一行的值)。您可以通过调用来访问该值data(),因为这是返回您的值的反应式表达式的名称,而不是testDF,因为一旦函数运行完毕,该对象就会被删除。

如果你想testDF包含结果prepData,只需更改反应式表达式的名称,如下所示:

testDF <- reactive({
    prepData(bdata, qdata)
})

testDF() # this will return the value you want

调用反应式表达式实际上确实返回一个数据框,您可以将其子集化并正常使用。因此,您可以像数据框一样使用它(但不要忘记括号!):

data()$GrossAmount
data()[data()$GrossAmount > 100, c('name', 'date')]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R Shiny Dashboard 中的反应函数中返回数据帧 的相关文章

随机推荐