RStudio サーバーと降雪を使用しています。私の並列コードは常に次のメッセージを表示します。
> sfInit(cpus = 14, parallel = TRUE)
> sfLapply(seq(along = trials), nvtPar, file)
23 Nov 2014 11:31:36 [rsession-users] ERROR svn: E070008: Can't read directory 'my-current-working-directory': Partial results are valid but processing is incomplete
; LOGGED FROM: core::Error session::modules::svn::status(const core::FilePath&, std::vector<session::modules::source_control::FileWithStatus, std::allocator<session::modules::source_control::FileWithStatus> >*) /home/ubuntu/rstudio/src/cpp/session/modules/SessionSVN.cpp:809
私の並列関数 (nvtPar) では、ハード ドライブからいくつかのファイルを読み取り、ファイルをハード ドライブに書き込みます。すべてのファイルはサブフォルダーにあります。
このサーバーは、16 コアの VMware 仮想サーバー上に構築されています。私の作業ディレクトリは nfs サーバーで、ホーム ディレクトリとしてマウントされています。
私の RStudio サーバーはバージョン 0.98.994 です。
これは私のセッション情報です:
> sessionInfo()
R version 3.1.1 (2014-07-10)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=C LC_COLLATE=C LC_MONETARY=C LC_MESSAGES=C LC_PAPER=C
[8] LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=C LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] snowfall_1.84-6 snow_0.3-13 magrittr_1.0.1 XML_3.98-1.1 ncdf4_1.13 dplyr_0.3.0.9000
loaded via a namespace (and not attached):
[1] DBI_0.3.1 Rcpp_0.11.3 assertthat_0.1 lazyeval_0.1.9.9001 parallel_3.1.1 tools_3.1.1
提案をありがとう。私の質問が明確でない場合はお知らせください。
編集: @roman-luštrik の提案として、質問を再現するために最小限の例を追加しました (スクリプト全体を投稿できなくて申し訳ありませんが、この例では同じエラー メッセージが生成されます)。
trials <- seq(1, 1593)
nvtPar <- function(i, file)
{
# Generate the random string which will store in the disk
MHmakeRandomString <- function(n=1, lenght=12)
{
randomString <- c(1:n) # initialize vector
for (i in 1:n)
{
randomString[i] <- paste(sample(c(0:9, letters, LETTERS),
lenght[i], replace=TRUE),
collapse="")
}
return(randomString)
}
sim <- MHmakeRandomString(2553, round(runif(2553) * 344))
write.table(sim, file = paste0(i, '.sim'),
quote = FALSE,
row.names = FALSE,
col.names = FALSE)
# Do some calculation
Sys.sleep(0.213 * (1 + (runif(1) * 2 - 1)) * 0.4)
# Remove the temp file
file.remove(paste0(i, '.sim'))
# Do other calculaation
Sys.sleep(2.32 * (1 + (runif(1) * 2 - 1)) * 0.1)
}
library(snowfall)
sfInit(cpus = 14, parallel = TRUE)
a <- sfLapply(seq(along = trials), nvtPar, file)
sfStop()
掘り下げた後、このエラーは並列計算の file.remove に関連しているようです。次の行にコメントすると、すべてのエラーが消えます。
file.remove(paste0(i, '.sim'))
ところで: 私は作業ディレクトリのバージョン管理に svn を使用しています。