相当于 purrr::map_df 中的 next

Nic*_*ick 4 r purrr tidyverse

我正在寻找purrr::map_df 调用的循环中的next的等效项。

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(.))
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我可以使用什么来代替Result <- NULL丑陋的 if 语句(即我想简单地检查条件并有效地执行“下一步”)。

Ada*_*son 5

要退出函数,您可以使用该return(<output>)命令。这会立即退出带有您定义的输出的函数。以下给出了与示例代码相同的输出。

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" ) {

    return(NULL)

  } 

  Result <- df %>% filter(y == max(y)) %>% mutate(Result = x*y)
}

Test <- split(df, df$z) %>% map_df(~Map_Func(.))
Run Code Online (Sandbox Code Playgroud)