Tidyverse unnest_tokens не работает внутри функции - PullRequest
0 голосов
/ 28 июня 2018

У меня есть функция unnest_tokens, которая работает в коде, но как только я помещаю ее в функцию, я не могу заставить ее работать. Я не понимаю, почему это происходит, когда я помещаю это в функцию.

данные:

id          words

1           why is this function not working
2           more text
3           help me
4           thank you
5           in advance
6           xx xx

Данные проверяются на stringsAsFactors == FALSE и, если это Vector.

is.vector(data$words)
[1] TRUE
is.vector(data$id)
[1] TRUE
typeof(data$words)
[1] "character"

Вот код вне функции, который дает правильный вывод:

df <- x %>% 
  unnest_tokens(word, words)%>%
  group_by(id)

1 why
1 is
1 this
1 function
1 not
1 working
2 more
2 text
3 help
3 me
4 thank
4 you
5 in
5 advance
6 xx
6 xx

Как только я помещаю код в функцию, я получаю сообщение об ошибке.

tidy_x <- unnestDF(data, "words", "id")

unnestDF <- function(df, col, groupbyCol) {
  x <- df %>%
    unnest_tokens(word, df[col])%>%
    group_by(df[groupbyCol])
  return(x)
}

Ошибка в check_input (x): Входные данные должны быть символьным вектором любой длины или списком символов векторы, каждый из которых имеет длину 1.

Заранее спасибо.

1 Ответ

0 голосов
/ 28 июня 2018

Поскольку мы используем аргументы в кавычках, одним из вариантов будет преобразование в символ и затем оценка (!!) в пределах unnest_tokens и вместо group_by использование group_by_at, которое может принимать строки

unnestDF <- function(df, col, groupbyCol) {
  df %>%
    unnest_tokens(word, !! rlang::sym(col))%>%
    group_by_at(groupbyCol)

   }


unnestDF(data, "words", "id")
# A tibble: 16 x 2
# Groups:   id [6]
#      id word    
# * <int> <chr>   
# 1     1 why     
# 2     1 is      
# 3     1 this    
# 4     1 function
# 5     1 not     
# 6     1 working 
# 7     2 more    
# 8     2 text    
# 9     3 help    
#10     3 me      
#11     4 thank   
#12     4 you     
#13     5 in      
#14     5 advance 
#15     6 xx      
#16     6 xx      
...