0

多分それは些細なことで、同じコードを探しすぎていたのかもしれません... getFLOSSmoleDataXML.RRStudio経由でRモジュールを調達すると、コードはディレクトリ内の.Rdataファイルを正しく検出し、cacheダウンロードと解析のフェーズをスキップします。一方、同じモジュールが GNU make( sudo -u ruser make) 経由で R によって処理される場合、結果は、まあ、奇妙なものになります。

Rscript --no-save --no-restore --verbose getFLOSSmoleDataXML.R
running
  '/usr/lib/R/bin/R --slave --no-restore --no-save --no-restore --file=getFLOSSmoleDataXML.R'

Loading required package: RCurl
Loading required package: methods
Loading required package: bitops
Loading required package: XML
Loading required package: digest

Verifying repository: FreeCode

Checking file "http://flossdata.syr.edu/data/fc/2013/2013-Dec/fcProjectAuthors2013-Dec.txt.bz2"...

rdataFile = "./cache/5802dbd08ebefadf70fbb826776f9f0f.Rdata"...

trying URL 'http://flossdata.syr.edu/data/fc/2013/2013-Dec/fcProjectAuthors2013-Dec.txt.bz2'
Content type 'application/x-bzip2' length 514960 bytes (502 Kb)
opened URL
==================================================
downloaded 502 Kb

Error in gzfile(file, "wb") : cannot open the connection
Calls: print ... FUN -> importRepoFiles -> lapply -> FUN -> save -> gzfile
In addition: Warning message:
In gzfile(file, "wb") :
  cannot open compressed file './cache/5802dbd08ebefadf70fbb826776f9f0f.Rdata', probable reason 'No such file or directory'
Timing stopped at: 0.74 0.068 1.134
Execution halted
make[1]: *** [importFLOSSmole] Error 1
make[1]: Leaving directory `/home/ruser/diss-floss/import'
make: *** [collection] Error 2
ubuntu@ip-10-164-108-61:/home/ruser/diss-floss$ ls -l cache/5802*
-rw-r--r-- 1 ruser ruser 1968939 Feb 19 05:47 cache/5802dbd08ebefadf70fbb826776f9f0f.Rdata

最後の 2 行からわかるように、ファイルが実際に存在することを確認しました。ここで何が起こっているのですか?アイデアやアドバイスはありますか?ありがとうございました!

4

1 に答える 1

1

簡単な調査の後、私はこの問題の原因を自分で見つけました。予想通り、これは本当に単純で小さな間違いです。他の人が同じようなことに遭遇しないように説明します。

コードでを使用するときはfile.exists()、問題のファイルへの相対パスをパラメーターとして渡します。ハードコーディングされた「キャッシュ」ディレクトリと動的に決定されたファイル名自体を連結して、そのパスを作成します。

# calculate URL's digest and generate corresponding RData file name
fileDigest <- digest(url, algo="md5", serialize=F)
rdataFile <- paste(RDATA_DIR, "/", fileDigest, RDATA_EXT, sep = "")

makeただし、トップレベルのプロジェクト ディレクトリを離れてサブディレクトリに入り、コードをビルドすることを忘れたため、 「キャッシュ」ディレクトリへの相対パスRDATA_DIR="./cache"のハードコードされた値 ( ) が正しくなくなります。簡単な変更 ( RDATA_DIR="../cache") で問題が解決しました。

これは、「魔法」の背後にある理由を説明しています:-)、同じコードが手動で (R または RStudio) 正常にビルドされますが、を介してビルドすると失敗しますmakeそうは言っても、これが既定のディレクトリ構造に依存するベスト プラクティスではない可能性があることは認識していますが、時間制限があるため、妥協点を決定する必要があります (そして、TODO [改善の可能性] リストに項目を追加します)。この分野でのベスト プラクティスについてアドバイスをいただければ幸いです。

于 2014-02-21T02:24:08.227 に答える