4

我正在为导入 xml 文件的 R 函数编写测试,settings.xml.

目前,当我为依赖于内容的函数编写测试时foo.xml,包括read.settings以下示例中的函数:

writeLines("<fee><fi><\fi>\fee>", con = "/tmp/foo.xml")
settings <- read.settings("/tmp/foo.xml")
file.remove("/tmp/foo.xml")

但是出现了一些与使测试系统独立相关的问题。例如,/tmp/可能无法写入或read.settings()在测试目录中留下孤立文件时出错等。这是一个简单的例子,我可以想办法解决这些问题,但我记得在回答上一个问题时有这样的解决方案,我现在找不到,其中con不是文件而是内存中的对象。我确信在很多情况下不实际写入文件会很有用。

  • 有没有办法写入和访问只存在于内存中的伪文件?
  • 该功能记录在哪里?
    ?connections似乎是一个很好的线索,但我不清楚如何使用提供的信息

作为跟进(但不要太开放)

  • 除了我上面描述的之外,这种功能的主要用途是什么?
  • 在哪些情况下不应该使用此功能?
4

2 回答 2

6

这是一个可能有用的构造。tempfile()为任何操作系统上的临时文件返回一个有效名称,并且调用on.exit(unlink())确保临时文件被删除,无论发生什么其他情况。

test1 <- function() {
    temp <- tempfile()
    on.exit(unlink(temp))
    writeLines("<fee><fi><\fi>\fee>", con = temp)
    settings <- readLines(temp)
    settings
}

test1()
# [1] "<fee><fi><\fi>\fee>"
于 2012-10-17T18:16:20.997 回答
4

您可以使用 将任何字符串转换为连接textConnection

xml.txt <- '<fee><fi><\fi>\fee>'
con <- textConnection(xml.txt)
settings <- read.settings(con)

我发现字符串连接在连接函数对您正在做的事情很方便的情况下很有用,但是所涉及的任务将导致磁盘上的文件长时间处于打开状态。您可以将文本连接用作缓冲区。

请注意,seek在读取文本连接的内容后,您不能使用文件连接的方式重置文本连接的位置。

于 2012-10-17T18:07:20.133 回答