使用lapply而不是重复代码

时间:2017-12-16 02:50:05

标签: r loops lapply

我想知道如何使用lapply和/或for循环来获得更简洁的代码。

这就是我现在拥有的并且有效。

MLFreq <- MLlyrics %>%
unnest_tokens(word, line) %>%
anti_join(stop_words) %>%
ungroup() %>%
count(word)
MLpct <- sum(albumList2$MLlyrics$n) / sum(MLFreq$n)

ViewFreq <- ViewLyrics %>%
unnest_tokens(word, line) %>%
anti_join(stop_words) %>%
ungroup() %>%
count(word)
Viewpct <- sum(albumList2$ViewLyrics$n) / sum(ViewFreq$n)

#... repeating 6 times with different data frames

我一直在尝试

Freq <- lapply(albumList2, function(df){
df %>% unnest_tokens(word, line) %>%
anti_join(stop_words) %>%
ungroup()%>%
count(word) %>%
sum(albumList2$df$n) / sum(df$n)
})

for (i in 1:length(albumList2)) {
unnest_tokens(word, line) %>%
anti_join(stop_words) %>%
ungroup()%>%
count(word) %>%
print(sum(albumList2$i$n) / sum(i$n))
}

但是lapply带来了

Error in check_input(x) : Input must be a character vector of any length or 
a list of character vectors, each of which has a length of 1.

和for循环带来

no applicable method for 'unnest_tokens_' applied to an object of class 
"function"

参考albumList2包含数据框列表(MLlyrics,ViewLyrics等...)

我本来打算原样离开它,但只是按照&#34的方式阅读;如果你使用相同的代码3次,那就循环它&#34;

1 个答案:

答案 0 :(得分:0)

lapply示例的问题是您循环的列表是嵌套列表而不是单个列表。

此外,参考类型:sum(albumList2$df$n) / sum(df$n)&amp; print(sum(albumList2$i$n) / sum(i$n))无效。

i只是一个从1到长度的数字(albumList2)。说你想要$ 1 n或者albumList2 $ 1 $ n没有意义。

您应该阅读列表和嵌套列表herehere中的索引编制。请添加一些虚拟数据,每个人都可以测试并帮助您更好。