r - 相当于 purrr::map_df 中的 next

标签 r tidyverse purrr

我正在寻找相当于 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(.))

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

最佳答案

要退出函数,您可以使用 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(.))

关于r - 相当于 purrr::map_df 中的 next,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55708953/

相关文章:

r - 在对称数据框中删除满足条件的行和列

r - 根据R dplyr中的多列选择每组中具有最大值的行

从数据框中删除所有只有零的列或行

r - 如何移动嵌套 tibbles 中的 tibbles 列?

r - ggplot2:仅显示一组中的文本标签

r - 如何查看 quantreg 包中的 .Fortran 函数

r - 如何在没有自动列检测的情况下将 fread() 用作 readLines()?

r - 使用 lapply 的绘图列表

r - purrr - 将数据帧的行提取为向量

r - 在 R 中压平数据框中的列表列