下面是一个pmap()
操作,需要我的数据是宽格式的。我每天执行一些模拟,并将每次模拟的最大值捕获为post_max
。
library(tidyverse)
POST_SIMS <- 2
CONDITIONS <- 3
DURATION <- 2
df <-
tibble(
day = rep(1:DURATION, each = CONDITIONS),
condition = rep(LETTERS[1:CONDITIONS], times = DURATION)
) |>
rowwise() |>
mutate(post = list(rnorm(POST_SIMS, 0, 1))) |>
ungroup()
df_wide <- df |>
pivot_wider(
id_cols = c(day),
names_from = "condition",
values_from = 'post'
)
df_wide |>
mutate(
post_max =
pmap(
.l = list(A,B,C), # This works, but needs manual updating
.f = pmax)
) |>
unnest()
字符串
问题是,当我到达pmap(list(A,B,C), pmax)
时,我必须手动列出唯一条件,这是不可取的,因为我的目标是编写一个可以容纳任何数量条件的模拟函数。
有没有一种方法可以捕获df
中生成的唯一条件,并将其作为参数提供给pmap(),就像我在下面尝试但失败的那样?
my_conditions <- noquote(unique(df$condition))
df_wide |>
mutate(
post_max =
pmap(
.l = list(my_conditions), # How do I do this part?
.f = pmax)
) |>
unnest()
型
提供给list()
的.l
参数有点让我困惑。这显然不是一个字符串。我把它写成.l = list(A,B,C)
,这通常很方便,但模糊了pmap()
是什么。我假设我正在处理某种整洁的评估,但是这个参数长度的灵活性与我的典型的整洁的eval应用程序不同,在我的典型的eval应用程序中,我只是将列命名为quosures。
1条答案
按热度按时间iecba09b1#
list(A,B,C)
在这个上下文中只是从mutate()
.data
参数(df_wide
)中选择列A
、B
和C
,将它们添加到列表中基本上会生成一个类似tibble的结构。尝试将list(A,B,C)
替换为pick(-day)
:字符串
rowwise()
+max(c_across())
应该会得到相同的结果,尽管我猜它更容易理解:型