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