如何在apply调用中通过管道将对象传输到特定位置,这不是第一个输入?magrittr点占位符似乎不适用于此.

  dat <- 1:10 
  locs <- list(c(1, 2),
               c(3, 4),
               c(5, 6))
  
  foo <- function(x, y, z) {
    out <- mean(c(x[y], x[z]))
    return(out)
  }
  
  # works
  lapply(locs, function(z) foo(dat, z[1], z[2]))
  
  # none of these work 
  dat %>%
    lapply(locs, function(z) foo(., z[1], z[2]))
    
  dat %>%
    lapply(locs, function(z) foo((.), z[1], z[2]))
    
  dat %>%
    lapply(locs, function(z) {. %>% foo(z[1], z[2])})
    
  
  # New native pipe and placeholder also do not work
  dat |>
    lapply(locs, function(z) foo(_, z[1], z[2]))  

推荐答案

这里有两种方法,magrittr和原生管道.

suppressPackageStartupMessages(library(magrittr))
dat <- 1:10 
locs <- list(c(1, 2),
             c(3, 4),
             c(5, 6))

foo <- function(x, y, z) {
  out <- mean(c(x[y], x[z]))
  return(out)
}

# wrap the function around parenthesis
dat %>%
  (\(d) lapply(locs, \(z) foo(., z[1], z[2])))()
#> [[1]]
#> [1] 1.5
#> 
#> [[2]]
#> [1] 3.5
#> 
#> [[3]]
#> [1] 5.5

# New native pipe with anonymous function
dat |>
  {\(d) lapply(locs, \(z) foo(x = d, z[1], z[2]))}()
#> [[1]]
#> [1] 1.5
#> 
#> [[2]]
#> [1] 3.5
#> 
#> [[3]]
#> [1] 5.5

reprex package(v2.0.1)于2022年5月18日创建

R相关问答推荐

大规模重新标记haven标签数据

带有叠加饼图系列的Highmap

从开始时间和结束时间导出时间

格点中指数、双曲和反双曲模型曲线的正确绘制

根据多个条件增加y轴高度以适应geom_text标签

错误:非常长的R行中出现意外符号

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

仅在Facet_WRAP()中的相应方面包含geom_abline()

有没有一种方法可以同时对rhandsontable进行排序和从rhandsontable中删除?

从R中的对数正态分布生成随机数的正确方法

KM估计的差异:SvyKm与带权重的调查

如何使这些react 表对象相互独立?

减go R中列表的所有唯一元素对

在点图上绘制置信度或预测区间ggplot2

ggplot斜体轴刻度标签中的单个字符-以前的帖子建议不工作

如何合并不同列表中的数据文件,包括基于名称的部分匹配,而不是一对一等价

附加中缀操作符

如何在R中的两列以上使用联合(&U)?

随机生成样本,同时在R内的随机样本中至少包含一次所有值

如何准确地指出Read_delim所面临的问题?