Как исправить ошибку filter_ в созданной мной функции? - PullRequest
1 голос
/ 05 мая 2020

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

Ниже приводится пример типа данных, которые я получаю. Давайте назовем этот фрейм данных names

FirstName<-c("Alan","James","Miles","Nath")
LastName<-c("Bottom","Bogus","Davis","Gun")

names<-data.frame(FirstName,LastName)  

  FirstName LastName
      Alan   Bottom
     James    Bogus
     Miles    Davis
      Nath      Gun

Я создал функцию с именем bogusfun следующим образом

bogusfun<-function(df){
  if(any(grepl("Bogus",df))) # This is to see which column contains  "Bogus" profiles
  col<-(colnames(df[grepl("Bogus",df)])) # This line assigns the column name containing the Bogus profile
  col<-as.name(col)  
  library(dplyr)
  df<-df%>%
    filter(col!="Bogus")
  return(df)
}

Когда я запускаю эту функцию в кадре данных

bogusfun(names)

Я ожидал увидеть

  FirstName LastName
     Alan   Bottom
     Miles    Davis
     Nath      Gun

Однако это работает не так, как ожидалось. Итак, я посмотрел на следующий раздел кода

if(any(grepl("Bogus",names)))
  col<-colnames(names[grepl("Bogus",names)])
  col<-as.name(col)
  df<-df%>%
      filter(col="Bogus")

, и он дает мне ошибку Ошибка в UseMethod("filter_") : no applicable method for 'filter_' applied to an object of class "function"

1 Ответ

0 голосов
/ 05 мая 2020

Здесь мы можем использовать filter_all

library(dplyr)
names %>%
    filter_all(all_vars(. != 'Bogus'))
#  FirstName LastName
#1      Alan   Bottom
#2     Miles    Davis
#3      Nath      Gun

Или с filter/across

names %>%
   filter(across(everything(), ~ . != 'Bogus'))
#  FirstName LastName
#1      Alan   Bottom
#2     Miles    Davis
#3      Nath      Gun

В функции OP применяется grep используйте весь набор данных, тогда как grep работает с vector/matrix. Согласно ?grep

x, text - вектор символов, в котором ищутся совпадения, или объект, который может быть приведен с помощью as.character к вектору символов. Поддерживаются длинные векторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...