我使用以下代码查找文件中单词memory
的出现次数,但结果错误。你能帮助我知道我错过了什么吗?
注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
这是file
答案 0 :(得分:7)
问题实际上是莎士比亚使用标点符号。文中有很多撇号(')。当R函数scan
遇到撇号时,它假定它是引用字符串的开头,并将所有字符读取到下一个撇号到names
数组的单个条目中。其中一个长条目恰好包含“memory”一词的两个实例,因此将匹配总数减少一个。
您可以告诉scan
将所有引号视为普通字符而不是特别处理它们来解决问题:
names <- scan('http://pastebin.com/raw.php?i=kC9aRvfB', what=character(), quote=NULL )
使用grep
的R实现时要小心。它的行为方式与通常的GNU / Linux程序完全不同。特别是,你在这里使用它的方式将找到匹配单词的数量,而不仅仅是一些人建议的匹配行的总数。
答案 1 :(得分:3)
正如@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