фильтрация rowwise в dplyr


apply,1

Я хотел использовать dplyr вместо того, чтобы отфильтровать набор данных rowwise по данным логическое выражение, т. е. на этом примере я бы хотел удалить все строки, которые имеют одно или более значений 99.Однако, меня удивила низкая производительность в dplyr. Любые идеи, если я могу ускорить этот процесс в dplyr? Кроме того, я бы подумал, что функция rowwise бы труба, отдельных строк, но, видимо, нет (см. ниже). Как я могу использовать функцию rowwise?

enter image description here
library(tidyverse)s <- tibble(rows = seq(from = 250, to = 5000, by = 250)) #my original dataset has 400K rows...s$num <- map(s$rows,  ~ rnorm(.x * 6))s$num <-  map(s$num,  ~ replace(.x, sample(1:length(.x), size = length(.x) / 20), 99))s$mat <- map(s$num,  ~ as_data_frame(matrix(.x, ncol = 6)))help_an <- function(vec) {  browser()  return(!any(vec == 99))}help_dp_t <- function(df) {  clo1 <- proc.time()  a <- as_data_frame(t(df)) %>% summarise_all(help_an)  df2 <- filter(df, t(a)[, 1])  b <- tibble(time = (proc.time() - clo1)[3], df = list(df2))  return(b)}s$dplyr <- map(s$mat,  ~ dplyr::mutate(help_dp_t(.x)))help_lap <- function(df) {  clo1 <- proc.time()  a_base <- df[apply(df, 1, function(x)    ! any(x == 99)), ]  b <- tibble(time = (proc.time() - clo1)[3], df = list(a_base))  return(b)}s$lapply <- map(s$mat,  ~ mutate(help_lap(.x)))s$equal_dplyr_lapply <-  map2_lgl(s$dplyr, s$lapply,  ~ all.equal(.x$df, .y$df))s$dplyr_time <- map_dbl(s$dplyr, "time")s$lapply_time <- map_dbl(s$lapply, "time")ggplot(gather(s, ... = c(7, 8)), aes(x = rows, y = value, color = key)) +  geom_line()

Я пробовал следующие с rowwise, но rowwise трубы не направит вектор, но и весь ДФ функции help_an.

help_dp_r <- function(df) {      clo1 <- proc.time()      df2 <-        df %>% rowwise() %>% mutate(cond = help_an(.)) ### . is not passed on as a vector, but the entire df??      b <- tibble(time = (proc.time() - clo1)[3], df = list(df2))    }    s$dplyr_r <- map(s$mat,  ~ dplyr::mutate(help_dp_r(.x)))