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