我正在寻找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 语句(即我想简单地检查条件并有效地执行“下一步”)。
要退出函数,您可以使用该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)