这是我的代码:

letters <-letters[1:5]
ui <- fluidPage(
  
  do.call(tabsetPanel,
          letters %>%
            purrr::map(~tabPanel(title = .x,
                                 uiOutput(outputId = .x)))),
)
server <- function(input, output, session) {
  
  1:5 %>% purrr::map( ~ {
    output[[paste0(letters[.x])]] <-
      renderUI({
        h1(letters[.x])
      })
    
  })
}

shinyApp(ui, server)

这是我的密码.这里的主要问题是理解服务器函数内部代码的语法.

为什么下面的代码不起作用:

1:5 %>% purrr::map(
    ~ output[[paste0(letters[.x])]] <-
      renderUI({
        h1(letters[.x])
      })
  )

还有,对于这个有效的代码,为什么我需要使用{ } Inside MAP

1:5 %>% purrr::map( ~ {
    output[[paste0(letters[.x])]] <-
      renderUI({
        h1(letters[.x])
      })

  })

有没有什么可以帮助你理解这个语法?

推荐答案

为了理解这一点,让我们举一个更简单的例子,因为这个问题与shiny没有明确的关系.

out <- list(1:3, 5:7)
out

#[[1]]
#[1] 1 2 3

#[[2]]
#[1] 5 6 7

要获取每个列表元素的sum,我们可以这样做

purrr::map(out, sum)
#[[1]]
#[1] 6

#[[2]]
#[1] 18

或使用~表示法

purrr::map(out, ~sum(.x))

现在,如果你想做一些"更"的事情,也就是,如果你想要应用的函数需要一个以上的步骤.因此,假设您想要取使用花括号({})所需的求和值的平方

purrr::map(out, ~{
  y <- sum(.x)
  y^2
})

#[[1]]
#[1] 36

#[[2]]
#[1] 324

一百零二

如果作为一般规则,GET过于复杂,您可以在函数中始终使用{}.所以在第一种情况下,你可以 Select purrr::map(out, ~{sum(.x)}).

R相关问答推荐

给定R中另一行中的值,如何插补缺失值

如何在ggplot 2 geom_segment图表中将UTC转换为EET?

变量计算按R中的行更改

R等效于LABpascal(n,1)不同的列符号

如何按排序顺序打印一个框架中所有精确的唯一值?

使用R中相同值创建分组观测指标

在R中使用download. file().奇怪的URL?

即使硬币没有被抛出,也要保持对其的跟踪

在rpart. plot或fancyRpartPlot中使用带有下标的希腊字母作为标签?

如何读取CSV的特定列时,给定标题作为向量

根据另一列中的值和条件查找新列的值

停止ggplot将多行减少到一行

按列中显示的配对组估算NA值

Geom_arcbar()中出错:找不到函数";geom_arcbar";

如何计算每12行的平均数?

根据r中另一个文本列中给定的范围对各列求和

在散点图中使用geom_point放置线图例

R:如何在数据集中使用Apply

使用显式二元谓词子集化sfc对象时出错

使用点图调整离散轴比例