【发布时间】:2019-04-16 13:08:30
【问题描述】:
我正在寻找相当于 next 在循环中的 purrr::map_df 调用。
map_df 可以很好地处理 NULL 数据帧(如下例所示),因此当我在下面的示例中设置 Result <- NULL 时它可以工作。
谁能为我下面的插图提出一个通用解决方案,不需要我设置Result <- NULL,而是立即“下一步”。
library(tidyverse)
set.seed(1000)
df <- data.frame(x = rnorm(100), y = rnorm(100), z = rep(LETTERS, 100))
Map_Func <- function(df) {
Sum_Num <- suppressWarnings(sqrt(sum(df$y)))
if( Sum_Num == "NaN" ) {
Result <- NULL
# I would like to have an equivalent to "next" here...
} else {
Result <- df %>% filter(y == max(y)) %>% mutate(Result = x*y)
}
Result
}
Test <- split(df, df$z) %>% map_df(~Map_Func(.))
在上面的代码中,我可以在丑陋的 if 语句中使用什么来代替 Result <- NULL(即我想简单地检查一个条件并有效地执行“下一步”)。
【问题讨论】:
-
group_split来自哪个包?它不在标准 dplyr 中 -
group_split函数在dplyr中,仅在最新版本中。 dplyr.tidyverse.org/reference/group_split.html 但是,您可能想要修改示例,因为大多数人可能不是最新版本,因此无法测试此代码。没必要,仅供参考 -
@IceCreamToucan 谢谢 - 我将代码调整为不依赖于使用最新的 dplyr 术语。
-
在函数map中使用你必须返回一些东西。你可以在 if 子句中使用
return(NULL)而不是执行 else 子句,这将等同于 next。 -
仅供参考,有一个
is.nan函数