使用dput()创建一个txt文件,以获得意外(由我)的额外字符

时间:2015-04-03 14:52:58

标签: r

注意: 我希望这可能是一个重复的问题。但是,当我搜索答案时,我找不到答案,所以感谢您的耐心等待。

问题:当我使用dput()将现有.txt文件的某些行写入新的.txt文件时,我看到了额外的,意外的字符,例如c(\

Repro步骤:

  1. 下载包含zip的{​​{1}}文件,以便阅读:

    .txt
  2. 解压缩文件:

    download.file(url = "https://d396qusza40orc.cloudfront.net/dsscapstone/dataset/Coursera-SwiftKey.zip", "dataset.zip")
    
  3. 阅读几行以预览数据:

    unzip(zipfile = "dataset.zip")
    
  4. 使用readLines("final/en_US/en_US.blogs.txt",n=2) [1] "In the years thereafter, most of the Oil fields and platforms were named after pagan “godsâ€." [2] "We love you Mr. Brown." # Ignore the characters around "gods" for this discussion

    将行写入新文件
    dput()
  5. dput(readLines("final/en_US/en_US.blogs.txt",n=2),"dputtest.txt") 读取行并查看新字符:

    dputtest.txt
  6. 可能的原因:我想知道这是否与文件编码有关,或者可能缺少必要的readLines("dputtest.txt") [1] "c(\"In the years thereafter, most of the Oil fields and platforms were named after pagan “godsâ€.\", " [2] "\"We love you Mr. Brown.\")" 参数。

    如果您需要我的任何其他信息以了解问题或重现问题,请与我们联系。感谢。

3 个答案:

答案 0 :(得分:2)

dput输出对象的可解析表示,以便您可以将其反馈回R命令行并获取原始对象。例如:

dput(letters, "test.txt")
let <- eval(parse("test.txt"))
identical(let, letters)  # TRUE

您可能想要的是writeLineswrite.tablewrite,具体取决于您的数据。

答案 1 :(得分:1)

我认为您应该使用writeLines()而不是dput()

rr <- readLines("final/en_US/en_US.blogs.txt",n=2)
writeLines(rr,"output.txt")

答案 2 :(得分:0)

使用dput保存数据时,请使用dget将数据读回R.

txt <- c("First line", "Second line")
f <- tempfile()
dput(txt, f)
txt2 <- dget(f)
identical(txt, txt2)