我想用一种纯粹的R方式来测试两个任意文件是否不同.所以,相当于diff -q在Unix中,但应该在Windows上工作,没有外部依赖.
我知道tools::Rdiff,但它似乎只想处理R输出文件,并且如果我用其他东西喂它就会大声抱怨.
thc*_*thc 19
不使用内存,如果文件太大:
library(tools)
md5sum("file_1.txt") == md5sum("file_2.txt")
Run Code Online (Sandbox Code Playgroud)
Agi*_*ean 12
最接近 unix 命令的是diffr- 它显示了一个非常漂亮的并排窗口,所有不同的行都用颜色标记。
library(diffr)
diffr(filename1, filename2)
Run Code Online (Sandbox Code Playgroud)
显示
我意识到这并不完全是您所要的,但是我将其发布是为了让遇到此问题的其他人受益,他们希望看到完整的差异并愿意容忍外部依赖性。在这种情况下,diffobj将使用适用于Windows的真实差异向您展示它们,并使用与GNU差异相同的算法。在此示例中,我们将Moby Dick文本与修改了5行的文本版本进行比较:
library(diffobj)
diffFile(mob.1.txt, mob.2.txt) # or `diffChr` if you data in R already
Run Code Online (Sandbox Code Playgroud)
产生:
如果您想更快地获得东西,同时又能找到差异的位置,则可以从同一软件包中获得最短的编辑脚本:
ses(readLines(mob.1.txt), readLines(mob.2.txt))
# [1] "1127c1127" "2435c2435" "6417c6417" "13919c13919"
Run Code Online (Sandbox Code Playgroud)
获取Moby Dick数据的代码(请注意,我没有设置种子,因此您将获得不同的行):
moby.dick.url <- 'http://www.gutenberg.org/files/2701/2701-0.txt'
moby.dick.raw <- moby.dick.UC <- readLines(moby.dick.url)
to.UC <- sample(length(moby.dick.raw), 5)
moby.dick.UC[to.UC] <- toupper(moby.dick.UC[to.UC])
mob.1.txt <- tempfile()
mob.2.txt <- tempfile()
writeLines(moby.dick.raw, mob.1.txt)
writeLines(moby.dick.UC, mob.2.txt)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7734 次 |
| 最近记录: |