我有一个round
函数,我希望将其应用于每个列表中的每个元素,但我的代码当前围绕整个列表。如何使用purrr
> library(purrr)
> library(tidy verse)
> 1:3 %>%
map(~ rnorm(104, .x)) %>%
map(~ round(max(.x, 0), 0))
[[1]]
[1] 4
[[2]]
[1] 5
[[3]]
[1] 6
如果它有帮助,那么这样做的非咕噜声方式将是以下
a = sapply(rnorm(104, mean = 20, sd = 10), function(x) round(max(x, 0), 0))
b = sapply(rnorm(104, mean = 20, sd = 10), function(x) round(max(x, 0), 0))
c = sapply(rnorm(104, mean = 20, sd = 10), function(x) round(max(x, 0), 0))
答案 0 :(得分:1)
你可以在另一个map
内完成。你调用max
的方式是给出该向量中所有数字的最大值,0加到向量的末尾,所以它只给出一个值。
请尝试这样做:使用map_dbl
映射向量中的每个值,将的最大值该单个值和0,然后将其传递给round
1:3 %>%
map(~rnorm(104, .x) %>% map_dbl(max, 0) %>% round())
答案 1 :(得分:1)
@camille很好地回答了这个问题。这是在自定义函数中使用pmax
的替代方法
positive_round <- function(...) round(pmax(..., 0), 0)
1:3 %>%
map(~ rnorm(104, .x)) %>%
map(~positive_round(0,.x))