我正在为导入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
似乎是一个很好的领导,但我不清楚如何使用提供的信息跟进(但不要太开放)
答案 0 :(得分:5)
这是一个可能有用的结构。 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>"
答案 1 :(得分:4)
您可以将任何字符串转换为与textConnection
的连接。
xml.txt <- '<fee><fi><\fi>\fee>'
con <- textConnection(xml.txt)
settings <- read.settings(con)
我发现字符串连接在连接函数对于您正在执行的操作很方便的情况下很有用,但所涉及的任务将导致磁盘上的文件长时间处于打开状态。您可以使用文本连接作为缓冲区。
注意,在使用文件连接的方式读取文本连接后,不能使用seek
重置文本连接的位置。