Какая функция должна вернуться в dplyr:: do (), чтобы пропустить обращение

#r #dplyr

#r #dplyr

Вопрос:

Я применяю пользовательскую функцию в do (), но в некоторых случаях мне не нужно выполнять вычисления (чтобы перехватить log (<0)). Что должна возвращать моя функция? NULL nor () не помогает.

 my_function<-function(data) {
    if(data$a<0) {
       return(NULL) #?????????
    } else {
       return(data.frame(ln=log(data$a)))
    }
}

table<-data.frame(a=seq(10,-10,by=-1),b=seq(0,20,by=1))

result<-table %>%
    group_by(b) %>%
    do(
        my_function(data=.)
    )
  

Комментарии:

1. В этом случае, возможно, вам не нужно do , чтобы для вас работала таблица %>% filter(a >0) %>% mutate(ln=log(a))

2. В данном случае да, но это небольшой пример, реальный код сложнее.

Ответ №1:

 my_function<-function(data) {
  if(data$a<0) {
    return(data.frame(NULL)) 
  } else {
    return(data.frame(ln=log(data$a)))
  }
}
  

Комментарии:

1. Или просто data.frame()