共享驱动器上带有Drake的文件路径

时间:2019-08-20 18:45:22

标签: r drake-r-package

我遇到了一些奇怪的幼龙行为,只是我无法弄清。我正在尝试向我的德雷克计划中添加一个df1.replace(df.set_index('#').X) Out[382]: A B C 0 2 15 5 1 5 17 10 2 10 21 15 。我正在远程计算机上以及该计算机上的网络驱动器上工作。如果我尝试将.rmd文件添加到我的计划中,如下所示:

.rmd

我尝试了以下排列以使其工作:

  • > library(drake) > library(rmarkdown) > > list.files() [1] "drake_testing.Rproj" "foo.png" "report.Rmd" > > plan <- drake_plan( + png("foo.png"), + plot(iris$Sepal.Length ~ iris$Sepal.Width), + dev.off(), + report = render( + input = knitr_in("report.Rmd"), + output_file = "report.html", + quiet = TRUE + ) + + ) > > plan # A tibble: 4 x 2 target command <chr> <expr> 1 drake_target_1 png("foo.png") 2 drake_target_2 plot(iris$Sepal.Length ~ iris$Sepal.Width) 3 drake_target_3 dev.off() 4 report render(input = knitr_in("report.Rmd"), output_file = "report.html", quiet = TRUE) > > ## Turn your plan into a set of instructions > config <- drake_config(plan) Error: The specified file is not readable: report.Rmd > > traceback() 13: stop(txt, obj, call. = FALSE) 12: .errorhandler("The specified file is not readable: ", object, mode = errormode) 11: digest::digest(object = file, algo = config$hash_algorithm, file = TRUE, serialize = FALSE) 10: rehash_file(file, config) 9: rehash_storage(target = target, file = file, config = config) 8: FUN(X[[i]], ...) 7: lapply(X = X, FUN = FUN, ...) 6: weak_mclapply(X = keys, FUN = FUN, mc.cores = jobs, ...) 5: lightly_parallelize_atomic(X = X, FUN = FUN, jobs = jobs, ...) 4: lightly_parallelize(X = knitr_files, FUN = storage_hash, jobs = config$jobs, config = config) 3: cdl_get_knitr_hash(config) 2: create_drake_layout(plan = plan, envir = envir, verbose = verbose, jobs = jobs_preprocess, console_log_file = console_log_file, trigger = trigger, cache = cache) 1: drake_config(plan) 移至本地驱动器,并使用完整路径将其调用到本地驱动器
  • .rmd内外添加file.path,以完成完整路径。
  • 尝试对以上每种情况使用knitr_in

我也尝试过调试,但是当drake将文件名转换为哈希然后将其转换回文件的基本名称(即file_in)时,我有点迷惑。该错误最终会在调用report.Rmd时发生。

有人有尝试找出类似问题的经验吗?

1 个答案:

答案 0 :(得分:1)

我认为答案取决于您在自己的外部digest("report.Rmd", file = TRUE)上呼叫drake_config(plan)时是否遇到相同的错误。如果错误(我敢打赌),可能是文件系统与R冲突。如果是这种情况,那么drake则无能为力。

我还建议您对计划进行一些更改:

plan <- drake_plan(
  plot_step = {
    png(file_out("foo.png")),
    plot(iris$Sepal.Length ~ iris$Sepal.Width),
    dev.off()
  },
  report = render(
    input = knitr_in("report.Rmd"),
    output_file = "report.html",
    quiet = TRUE
  )  
)

或者更好的是,将您的工作划分为可重用的功能:

plot_foo = function(filename) {
  png(filename),
  plot(iris$Sepal.Length ~ iris$Sepal.Width),
  dev.off()
}

plan <- drake_plan(
  foo = plot_foo(file_out("foo.png")),
  report = render(
    input = knitr_in("report.Rmd"),
    output_file = "report.html",
    quiet = TRUE
  )  
)

目标是具有有意义的返回值和/或输出文件的可跳过工作流程步骤。 png()dev.off()是绘制步骤的一部分,并且file_out()告诉drake注意foo.png的变化。同样,命名目标也是个好习惯。通常,目标的返回值是有意义的,就像R中的变量一样。