Игнорировать / подавлять ошибку при объединении на пустом фрейме данных - PullRequest
0 голосов
/ 04 октября 2019

У меня есть динамический автоматический процесс, в котором я беру файлы, обрабатываю их и left_join их вместе.

Я не всегда получаю все файлы, поэтому иногда моя таблица RHS left_join пуста, чтоследовательно выдает ошибку

Ошибка: не совместима с STRSXP: [type = NULL].

Рассмотрим следующий пример

library(dplyr)
df <-structure(list(id = c(1, 2), var = c("a", "b")), class = "data.frame", row.names = c(NA, 
-2L))

df2 <- structure(list(), class = "data.frame", row.names = integer(0))

df %>% 
  left_join(df2, by=('id'))

Есть липростой способ игнорировать / подавить ошибку для объединения, если таблица RHS пуста?

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

Благодаря комментариям я пришел к следующему простому подходу, который может помочь кому-то еще в будущем с подобной проблемой.


df %>% {
  tryCatch(left_join(.,df2, by = ('id')),
           error=function(e) .)}



0 голосов
/ 05 октября 2019

Поскольку, если ... еще не очень хорошо работает в конвейерных выражениях, я бы сделал пользовательскую функцию, чтобы просто вернуть (предполагаемый) непустой фрейм данных. Возможно, вы захотите добавить третье условие, если оба они пустые, но это должно помочь вам начать:

left_join_if_exists = function(d1, d2, by) {
  if (0 %in% dim(d1)) {
    message("Warning: First data frame is empty")
    return(d2)
  } else if (0 %in% dim(d2)) {
    message("Warning: Second data frame is empty")
    return(d1)
  } else{
    return( left_join(d1,d2,by = by) )
  }
}

df %>% 
  left_join_if_exists( ., df2, by=c('id'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...