Передача нескольких аргументов в виде списка в R - PullRequest
0 голосов
/ 02 июня 2019

Я хочу передать список аргументов как вектор другой команде в R. Я не хочу повторять один и тот же набор аргументов каждый раз.

Это код, который мне нужно запустить 6раз для каждого $full_text столбца фреймов данных в диапазоне t1 to t6.

    library(quanteda)

t1t <- tokens(t1$full_text, what = 'word', remove_numbers = TRUE,
                 remove_punct = TRUE,
                 remove_symbols = TRUE,
                 remove_separators = TRUE,
                 remove_twitter = TRUE,
                 remove_hyphens = TRUE,
                 remove_url = TRUE)
t1t <- tokens_tolower(t1t)
t1t <- tokens_select(t1t, stopwords(), selection = "remove")
t1t <- unlist(t1t)
t1t <- unique(t1t)
t1t <- as.data.frame(t1t)
t1t <- as.data.frame.matrix(t1t)

Есть ли способ передать одноразовый аргумент.

1 Ответ

0 голосов
/ 02 июня 2019

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

Также tokens может обрабатывать векторы, чтобы вы могли передавать несколько столбцов вместе как один вектор.

library(quanteda)

tokens(c(t1$colname, t2$colname, t3$colname), what = "word", remove_numbers = TRUE, 
  remove_punct = TRUE, remove_symbols = TRUE, remove_separators = TRUE, 
  remove_twitter = TRUE, remove_hyphens  =TRUE, remove_url = TRUE)

На основании обновления и примера на странице справки ?tokens

t1 <- data.frame(full_text = "#textanalysis is MY <3 4U @myhandle gr8 #stuff :-)", 
              stringsAsFactors = FALSE)
t2 <- data.frame(full_text = c("This is $10 in 999 different ways,\n up and down; 
    left and right!", "@kenbenoit working: on #quanteda 2day\t4ever, 
    http://textasdata.com?page=123."), stringsAsFactors = FALSE)

Мы можем создать функцию, чтобы применить ее ко всем фреймам данных

 complete_function <- function(x) {
   t1t <- tokens(x, what = 'word', remove_numbers = TRUE,
                  remove_punct = TRUE,
                  remove_symbols = TRUE,
                  remove_separators = TRUE,
                  remove_twitter = TRUE,
                  remove_hyphens = TRUE,
                  remove_url = TRUE)
   t1t <- tokens_tolower(t1t)
   t1t <- tokens_select(t1t, stopwords(), selection = "remove")
   t1t <- unlist(t1t)
   t1t <- unique(t1t)
   t1t <- as.data.frame(t1t)
   t1t <- as.data.frame.matrix(t1t)
}

Затем используйте mget, чтобы получить фреймы данных t1, t2, t3 и т. Д. И применить функцию к столбцу "full_text" каждого фрейма данных.

lapply(mget(ls(pattern = "^t\\d+")), function(x) complete_function(x$full_text))

#$t1
#           t1t
#1 textanalysis
#2           4u
#3     myhandle
#4          gr8
#5        stuff

#$t2
#        t1t
#1 different
#2      ways
#3      left
#4     right
#5 kenbenoit
#6   working
#7  quanteda
#8      2day
#9     4ever
...