使用R函数查找文件中某个单词的出现次数

使用R函数查找文件中某个单词的出现次数,r,file,R,File,我使用以下代码查找文件中某个单词内存的出现次数,结果不正确。你能帮我知道我错过了什么吗 注1:问题是寻找单词“记忆”的确切出现! 注2:我意识到他们在寻找“记忆”,甚至像“记忆”这样的东西,这是不被接受的!我想这就是引起混乱的部分。我试着用“行动”这个词,正确答案是7!你也可以试试 #names=scan("hamlet.txt", what=character()) names <- scan('http://pastebin.com/raw.php?i=kC9aRvfB', what=

我使用以下代码查找文件中某个单词
内存
的出现次数,结果不正确。你能帮我知道我错过了什么吗

注1:问题是寻找单词“记忆”的确切出现! 注2:我意识到他们在寻找“记忆”,甚至像“记忆”这样的东西,这是不被接受的!我想这就是引起混乱的部分。我试着用“行动”这个词,正确答案是7!你也可以试试

#names=scan("hamlet.txt", what=character())
names <- scan('http://pastebin.com/raw.php?i=kC9aRvfB', what=character())
Read 28230 items
> length(grep("memory",names))
[1] 9
#names=scan(“hamlet.txt”,what=character())
名称长度(grep(“内存”,名称))
[1] 9

这是@andrew指出的

,如果一个单词在同一行重复,我以前的答案会给出错误的结果。根据其他答案/评论,这一条似乎还可以:

names = scan('http://pastebin.com/raw.php?i=kC9aRvfB', what=character(), quote=NULL )
idxs = grep("memory", names, ignore.case = TRUE)

length(idxs)
# [1] 10

问题其实是莎士比亚对标点符号的使用。课文中有许多撇号(')。当R函数
scan
遇到撇号时,它假定它是带引号字符串的开头,并将所有字符读取到
names
数组的单个条目中,直到下一个撇号为止。其中一个长条目恰好包含单词“memory”的两个实例,因此将匹配的总数减少了一个

您可以通过告诉
scan
将所有引号视为普通字符,而不是专门处理它们来解决此问题:

names <- scan('http://pastebin.com/raw.php?i=kC9aRvfB', what=character(), quote=NULL )

url需要验证的名称似乎没问题……您希望得到什么结果?您希望得到什么结果
grep
将返回包含字符串“memory”的元素(行)数。如果每个元素有多个实例,
grep
不会告诉您。这能解释任何明显的差异吗?@jbaums哦,对不起,我不知道。我把文件放在了pastebin中。@jbaums你是对的。我希望有一个小的示例数据集,而不是明天将消失的pastebin.com条目。我对这个问题投了否决票,如果没有发布示例数据集,我也会投票关闭。很可能这个词在一行中出现了两次。这是不正确的。请尝试
grep('memory','memory\n')
并查看
grep
不关心'\n'。@jbaums length(grep(“memory\n”,names))在这里返回1…我不明白。即使在编辑之后,代码也不会在单个元素(行)中检测到多个'memory'实例。它只告诉我们包含一个或多个“内存”实例的行数。@Fernando:这样想吧
grep('memory','memory\n')
说的是“在字符串'memory\n'中查找'memory',”,而
grep('memory\n','memory')
说的是“在字符串'memory'中查找'memory\n'。谢谢您指出这一点,@andrew。我应该说“元素”而不是“行”,尽管在@Fernando的例子中(使用
readLines
),元素是行。@Fernando:在这个特殊的例子中,每个元素最多有一个实例,但可能还有更多。按照@andrew的建议,使用带参数的
scan
,将文本拆分为单个单词。