junfei 感谢指正。确实是楼上各位说的 qianziwen.txt 文件的编码问题。已经修改和更新。代码不用改,再试试。
yihui tctcab 我认罪。
完全想不起来是啥原因让我代码里写的是 encoding = 'UFT-8'
而文件编码是 ANSI。书稿是 bookdown 写的,照理说这种情况下编译应该出错才对。
最大的可能,就是成书后整理重复文件时,误打死了孙悟空而留下了六耳猕猴。
硬编码的路径 c:/r4r/qianziwen.txt
确实是书里用的。这是因为前文在教读者从硬盘的绝对路径读取数据文件。这也是为啥这个例子里在 readLines 之前先多此一举地 download,目的就是反复让读者练习读取本地数据。其实功能上来说直接 qzw <- readLines("http://dapengde.com/r4rookies/qianziwen.txt", encoding = 'UTF-8')
就行了。
这是两年前写书的想法。写完书这两年里,我的想法发生了触及灵魂的变化。如果现在写,我会介绍 rosr 包里整合的相对路径法。
下面 qianziwen.txt 修改编码后,旧代码现在的运行结果。
download.file(url =
"http://dapengde.com/r4rookies/qianziwen.txt",
destfile = "c:/r4r/qianziwen.txt")
qzw <- readLines('c:/r4r/qianziwen.txt', encoding = 'UTF-8')
class(qzw)
## [1] "character"
length(qzw)
## [1] 249
nchar(qzw)
## [1] 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9
## [36] 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0
## [71] 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9
## [106] 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0
## [141] 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9
## [176] 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0
## [211] 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9
## [246] 0 9 0 9
qzwmerged <- paste(qzw, collapse = '')
qzwmerged <- gsub(' ', '', qzwmerged)
nchar(qzwmerged)
## [1] 1000
qzwsingle <- strsplit(qzwmerged, '')[[1]]
chardup <- qzwsingle[duplicated(qzwsingle)]
for(i in chardup) print(paste(i, grep(i, qzw, value = T)))
## [1] "发 吊民伐罪 周发殷汤" "发 盖此身发 四大五常"
## [1] "义 节义廉退 颠沛匪亏" "义 俊义密勿 多士实宁"
## [1] "实 策功茂实 勒碑刻铭" "实 俊义密勿 多士实宁"
## [1] "云 云腾致雨 露结为霜" "云 岳宗泰岱 禅主云亭"
## [1] "昆 金生丽水 玉出昆冈" "昆 昆池碣石 钜野洞庭"
## [1] "戚 欣奏累遣 戚谢欢招" "戚 亲戚故旧 老少异粮"
## [1] "洁 女慕贞洁 男效才良" "洁 纨扇圆洁 银烛炜煌"
## [1] "并 九州禹迹 百郡秦并" "并 释纷利俗 并皆佳妙"