pmap 的三个输入,但只迭代其中两个
Three inputs to pmap but only iterate over two of them
我有这个功能:
power_fcn <- function(.x, .y, .l){
tmp <- pwr.t.test(n = .x,
d = NULL,
power = 0.8,
sig.level = .y,
type = .l,
alternative = "two.sided")
tibble(n_per_arm = .x,
power = tmp$power,
sig_level = tmp$sig.level,
test = tmp$alternative,
type = tmp$type,
cohens_d = tmp$d)
}
我希望能够 运行 这两次,并在每次调用时更改 type
。例如,第一个调用是 type = "two.sample"
并且看起来像这样:
d1 <- crossing(n = seq(100, 500, by = 100),
alpha = c(0.05, 0.005))
power_df <- purrr::pmap_dfr(
.x = d1$n,
.y = d1$alpha,
.l = "two.sample", #this is the bit i want to be able to vary on each call
.f = power_fcn
)
但是,R 试图遍历 .l
以及 .x
和 .y
。我不希望它那样做。我可以在 crossing()
中包含 type
但这意味着我只能 运行 调用一次 power_fcn
并且它将同时包含 "two.sample"
和 "paired"
,例如。如果我希望能够 运行 多次,例如:
power_df_twosample <- purrr::pmap_dfr(
.x = d1$n,
.y = d1$alpha,
.l = "two.sample",
.f = power_fcn
)
power_df_paired <- purrr::pmap_dfr(
.x = d1$n,
.y = d1$alpha,
.l = "paired",
.f = power_fcn
)
我需要找到一种方法让 R 不遍历 .l
,或者找到另一种方法将动态对象传递给 power_fcn
(对于 type
)map2_dfr
.
有人可以帮忙吗?
我猜这个有用。 pmap
中的 .l
应该是向量列表(或数据框),并且您的函数会迭代它们。其他参数,如 type
(或原始代码中的 .x 和 .y)也被传递,我认为它们不需要是向量,也不需要被迭代。
power_fcn <- function(n, alpha, type) {
tmp <- pwr.t.test(n = n,
d = NULL,
power = 0.8,
sig.level = alpha,
type = type,
alternative = "two.sided")
tibble(n_per_arm = n,
power = tmp$power,
sig_level = tmp$sig.level,
test = tmp$alternative,
type = tmp$type,
cohens_d = tmp$d)
}
d1 <- crossing(n = seq(100, 500, by = 100),
alpha = c(0.05, 0.005))
power_df <-
pmap_dfr(.l = d1, .f = power_fcn, type = "two.sample")
##> # A tibble: 10 × 5
##> n_per_arm power sig_level test cohens_d
##> <dbl> <dbl> <dbl> <chr> <dbl>
##> 1 100 0.8 0.005 two.sided 0.521
##> 2 100 0.8 0.05 two.sided 0.398
##> 3 200 0.8 0.005 two.sided 0.367
##> 4 200 0.8 0.05 two.sided 0.281
##> 5 300 0.8 0.005 two.sided 0.299
##> 6 300 0.8 0.05 two.sided 0.229
##> 7 400 0.8 0.005 two.sided 0.259
##> 8 400 0.8 0.05 two.sided 0.198
##> 9 500 0.8 0.005 two.sided 0.231
##> 10 500 0.8 0.05 two.sided 0.177
我有这个功能:
power_fcn <- function(.x, .y, .l){
tmp <- pwr.t.test(n = .x,
d = NULL,
power = 0.8,
sig.level = .y,
type = .l,
alternative = "two.sided")
tibble(n_per_arm = .x,
power = tmp$power,
sig_level = tmp$sig.level,
test = tmp$alternative,
type = tmp$type,
cohens_d = tmp$d)
}
我希望能够 运行 这两次,并在每次调用时更改 type
。例如,第一个调用是 type = "two.sample"
并且看起来像这样:
d1 <- crossing(n = seq(100, 500, by = 100),
alpha = c(0.05, 0.005))
power_df <- purrr::pmap_dfr(
.x = d1$n,
.y = d1$alpha,
.l = "two.sample", #this is the bit i want to be able to vary on each call
.f = power_fcn
)
但是,R 试图遍历 .l
以及 .x
和 .y
。我不希望它那样做。我可以在 crossing()
中包含 type
但这意味着我只能 运行 调用一次 power_fcn
并且它将同时包含 "two.sample"
和 "paired"
,例如。如果我希望能够 运行 多次,例如:
power_df_twosample <- purrr::pmap_dfr(
.x = d1$n,
.y = d1$alpha,
.l = "two.sample",
.f = power_fcn
)
power_df_paired <- purrr::pmap_dfr(
.x = d1$n,
.y = d1$alpha,
.l = "paired",
.f = power_fcn
)
我需要找到一种方法让 R 不遍历 .l
,或者找到另一种方法将动态对象传递给 power_fcn
(对于 type
)map2_dfr
.
有人可以帮忙吗?
我猜这个有用。 pmap
中的 .l
应该是向量列表(或数据框),并且您的函数会迭代它们。其他参数,如 type
(或原始代码中的 .x 和 .y)也被传递,我认为它们不需要是向量,也不需要被迭代。
power_fcn <- function(n, alpha, type) {
tmp <- pwr.t.test(n = n,
d = NULL,
power = 0.8,
sig.level = alpha,
type = type,
alternative = "two.sided")
tibble(n_per_arm = n,
power = tmp$power,
sig_level = tmp$sig.level,
test = tmp$alternative,
type = tmp$type,
cohens_d = tmp$d)
}
d1 <- crossing(n = seq(100, 500, by = 100),
alpha = c(0.05, 0.005))
power_df <-
pmap_dfr(.l = d1, .f = power_fcn, type = "two.sample")
##> # A tibble: 10 × 5
##> n_per_arm power sig_level test cohens_d
##> <dbl> <dbl> <dbl> <chr> <dbl>
##> 1 100 0.8 0.005 two.sided 0.521
##> 2 100 0.8 0.05 two.sided 0.398
##> 3 200 0.8 0.005 two.sided 0.367
##> 4 200 0.8 0.05 two.sided 0.281
##> 5 300 0.8 0.005 two.sided 0.299
##> 6 300 0.8 0.05 two.sided 0.229
##> 7 400 0.8 0.005 two.sided 0.259
##> 8 400 0.8 0.05 two.sided 0.198
##> 9 500 0.8 0.005 two.sided 0.231
##> 10 500 0.8 0.05 two.sided 0.177