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 に答える