`magrittr` 管道应用
`magrittr` pipe into apply
如何将对象传送到 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]))
您可以像下面这样使用{}
> dat %>%
+ {lapply(locs, function(z) foo(., z[1], z[2]))}
[[1]]
[1] 1.5
[[2]]
[1] 3.5
[[3]]
[1] 5.5
这里有两种方法,使用 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-05-18 创建
如何将对象传送到 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]))
您可以像下面这样使用{}
> dat %>%
+ {lapply(locs, function(z) foo(., z[1], z[2]))}
[[1]]
[1] 1.5
[[2]]
[1] 3.5
[[3]]
[1] 5.5
这里有两种方法,使用 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-05-18 创建