У меня есть куча повторяющегося кода, который, я думаю, я могу сделать более эффективным, включив цикл for; Хотя я пытался сделать из них объекты в R.
Папка с именем input содержит 10 файлов с названием «2010.txt, 2011.txt, ... 2019.txt»
L OOP ONE
files <- list.files("../input")
#Each Year File Path
y2010 <- read_file(glue("../input/", files[1], sep = ""))
y2011 <- read_file(glue("../input/", files[2], sep = ""))
...
y2019 <- read_file(glue("../input/", files[10], sep = ""))
Из этого я хотел бы сделать следующее:
##Dataframe of each year's data
all_text <- rbind(y2010,y2011,y2012,y2013,y2014,y2015,y2016,y2017,y2018,y2019)
L OOP TWO Теперь я хотел бы нравится брать каждый год и делать новые объекты "tok201x".
###Each year
tok2010 <- data_frame(text = y2010) %>%
unnest_tokens(word, text)
tok2011 <- data_frame(text = y2011) %>%
unnest_tokens(word, text)
...
tok2019 <- data_frame(text = y2019) %>%
unnest_tokens(word, text)
L OOP THREE Наконец, возьмите "tok201x" и введите их в код настроения.
#2010
nrc2010 <- tok2010 %>%
inner_join(get_sentiments("nrc")) %>% # pull out only sentiment words
count(sentiment) %>% # count each
spread(sentiment, n, fill = 0)# made data wide rather than narrow
#2011
nrc2011 <- tok2011 %>%
inner_join(get_sentiments("nrc")) %>% # pull out only sentiment words
count(sentiment) %>% # count each
spread(sentiment, n, fill = 0)# made data wide rather than narrow
...
#2019
nrc2019 <- tok2019 %>%
inner_join(get_sentiments("nrc")) %>% # pull out only sentiment words
count(sentiment) %>% # count each
spread(sentiment, n, fill = 0)# made data wide rather than narrow
И все они хранятся в списке.
Я играл с assign () , но это не сработало так, как я надеялся.
РЕДАКТИРОВАТЬ: Используя код @ desval с lapply (), я сломал функцию. Цель этого состоит в том, чтобы объединить списки в один df. Как мне выполнить sh это, хотя?
custom.function1 <- function(x){
#debug x <- files[1]
tmp <- read_file(x)
tmp <- tibble(text = tmp)
return(tmp)
}
custom.function2 <- function(x){
tmp <- tmp %>%
unnest_tokens(word, text) %>%
inner_join(get_sentiments("nrc")) %>% # pull out only sentiment words
count(sentiment) %>% # count each
spread(sentiment, n, fill = 0)
return(tmp)
}
out1 <- lapply(files, function1)
##Take all year data and combine into one dataframe, previously...
outYEAR <- matrix(unlist(out1), ncol = 10, byrow = TRUE)
outYEAR <- outYEAR %>%
pivot_longer(everything(), names_to = 'year', values_to = 'text')
##This does not work....
out2 <- lapply(out1, function2)
##Again, combine to one dataframe, previously...
out2YEAR <- matrix(unlist(out2), ncol = 10, byrow = TRUE)
out2YEAR <- out2YEAR %>%
pivot_longer(everything(), names_to = 'year', values_to = 'text')
#THIS DOES NOT WORK.
Коллективный df должен быть "матрицей", а не "tbl_df".