【发布时间】:2019-11-04 18:32:05
【问题描述】:
我正在尝试在 R 中使用 tidytext 复制分析,但使用循环除外。具体示例来自 Julia Silge 和 David Robinson 的 Text Mining with R, a Tidy Approach。它的上下文可以在这里找到:https://www.tidytextmining.com/sentiment.html#sentiment-analysis-with-inner-join。
在正文中,他们举例说明了如何使用 NRC 词典进行情绪分析,该词典有八种不同的情绪,包括喜悦、愤怒和期待。我没有像示例那样对特定书籍进行分析,因此我注释掉了该行,它仍然有效:
nrc_list <- get_sentiments("nrc") %>%
filter(sentiment == "joy")
wordcount_joy <- wordcount %>%
# filter(book == "Emma") %>%
inner_join(nrc_list) %>%
count(word, sort = TRUE)
正如我之前所说,这行得通。我现在想修改它以遍历所有八种情绪,并将结果保存在带有情绪标签的数据框中。我如何尝试修改它:
emotion <- c('anger', 'disgust', 'joy', 'surprise', 'anticip', 'fear', 'sadness', 'trust')
for (i in emotion) {
nrc_list <- get_sentiments("nrc") %>%
filter(sentiment == "i")
wcount[[i]] <- wordcount %>%
inner_join(nrc_list) %>%
count(word, sort = TRUE)
}
我在执行此操作时收到“错误:找不到对象 'wcount'”消息。我已经用谷歌搜索了这个问题,似乎这个问题的答案是使用 wcount[[i]] 但是当我尝试调整它时,显然有些问题。你有什么建议吗?
【问题讨论】:
-
sentiment == "i" 正在寻找具有字符串值“i”的情绪。你能用情绪 == i 试试你的代码吗?另外, wcount 是否已经作为列表启动?它看起来不像。您可以在 for 循环之前使用 wcount = list() 来启动它
-
感谢您的回复。删除引号不会改变任何东西,但是像你说的那样插入 wcount=list() 会导致 8 个小标题,每个元素 i 一个。不幸的是,它们都是空的,没有行。从理论上讲,如果我可以填充这些小标题就可以了,但这与我稍后可以调用的 Silge/Robinson 书中(以及我在这里使用的)中创建 wordcount_joy 数据框所发生的情况略有不同。