我使用下面的代码来查找文件中出现的单词memory的次数,并且得到了错误的结果。你能帮我知道我错过了什么吗?
NOTE1:问题是寻找“记忆”这个词的准确出现!NOTE2:我意识到他们确实在寻找“记忆”,甚至像“记忆”这样的东西也不被接受!我想,这就是引起混乱的部分。我试着用“动作”这个词,正确的答案是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这是文件
发布于 2014-02-05 03:18:35
正如@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发布于 2014-02-05 03:22:19
问题是莎士比亚对标点符号的使用。课文中有很多撇号。当R函数scan遇到一个撇号时,它假设它是一个引号字符串的开始,并将所有字符读入到下一个撇号到names数组的单个条目中。这些长条目中的一个碰巧包含两个单词"memory“的实例,因此将匹配的总数减少了一个。
您可以通过告诉scan将所有引号视为普通字符,而不对它们进行特殊处理来解决此问题:
names <- scan('http://pastebin.com/raw.php?i=kC9aRvfB', what=character(), quote=NULL )在使用grep的R实现时要小心。它的行为方式与通常的GNU/Linux程序不同。特别是,您在这里使用它的方式将找到匹配词的数量,而不仅仅是一些人建议的匹配行的总数。
https://stackoverflow.com/questions/21567718
复制相似问题