无法在闪亮的应用程序中使用lApply函数内的Apply函数函数、应用程序、lApply、Apply

2023-09-04 02:21:20 作者:笑傲苍生

此代码在每列中返回许多非NA的响应。

apply(df, 2, function(x) sum(!is.na(x)))

我还制作了一个应用程序,它使用IRIS数据集的‘种’列将其分成3个部分。然后显示这3个部分。我们可以真正使用任何数据,并根据某个列将其分成几个部分。 但是,我还想计算3个数据集的每一列中的回复数量,我不确定该如何计算。我尝试了以下方法及其变种,但失败了。我认为我还需要使用子集(x,SELECT=-c(物种))从数据集中设置物种列的子集,但我现在真的很困惑,不知道如何实现所有这些。这是我正在做的项目的最后一个方面,我真的需要一些帮助:-

以下是将数据分成3部分并显示它的代码:-

library(shiny) data(iris)
server<- shinyServer(
function(input, output) {
output$data <- renderUI({
  splitDFs<- split(iris, iris$Species)
  lapply(splitDFs, function(x) renderTable(x))
})
} )
ui<- shinyUI(fluidPage( titlePanel(title = h4("Iris Dataset", align="center")), sidebarLayout( sidebarPanel( ),
mainPanel(
  uiOutput("data"),
  
)
)
))
shinyApp(ui = ui, server = server)

以下是我到目前为止尝试过的内容。我尝试了以下代码的各种变体,但都失败了:-

output$data <- renderUI({
            splitDFs<- split(iris, iris$Species)
            lapply(splitDFs, function(x) apply(splitDFs, 2, function(x) sum(!is.na(x)))(x) )

        })

推荐答案

Vitamin B16的答案可满足您的需求,因此您需要弄清楚如何表示它。

例如,如果您在服务器中使用以下代码(稍微修改一下Vitamin B16的答案):

output$data <- renderUI({
    splitDFs<- split(iris, iris$Species)
    
    sP <- data.frame(t(sapply(splitDFs, function(x) sapply(x, function(y) sum(!is.na(y))))))
    sP <- cbind(data.frame(Metric = rownames(sP)), sP)
    sP2 <- renderTable(sP)
    
    return(list(sP2))
    
  })

您会看到这个:

在这里,每一行都是数据中的一个拆分,每一列都是原始数据集中的一列。这些单元格表示该组合中非缺失值的数量。

拆分工作正常。

然后,我们首先像Vitamin一样使用嵌套应用来计算 横截面非NA计数。

我们使用sApply而不是lApply来获得矩阵输出,而不是 列出输出,以便我们可以轻松强制使用数据帧。

在强制之前,我们会转置,因此列保持为列(您可以 如果你喜欢,可以玩这个)。

然后,我们添加行名作为显式列。我们会这么做的 通过cind,否则公制列将位于末尾。

然后,我们将其放入renderTable中并将其传回。

请注意,由于这现在只是一个表,您可以使用renderTable 和TableOutput,而不用担心renderUI和 Ui输出。
 
精彩推荐
图片推荐