0

我有一个提交给 condor 的 R 作业,提交给 condor 的 R 文件(one.R)正在读取另一个 R 文件(two.R),当我将作业提交给 condor 时,它失败并且原因是提交的 R(one.R) 文件未读取调用的 R 文件(two.R) 文本文件中的错误是:

Error in file(file, "rt") : cannot open the connection
Calls: read.table -> file
In addition: Warning message:
In file(file, "rt") :
  cannot open file 'C:/Users/pcname/Desktop/test_case/two.R': Permission denied
Execution halted 

我的提交文件是

#test_input.condor
#

executable = C:\R\R-2.10.1\bin\Rscript.exe
arguments = one.R
universe = vanilla
getenv = true
#requirements = ARCH == "INTEL" && OPSYS == "WINNT60" 
input = one.R

should_transfer_files = yes
transfer_executable = false
when_to_transfer_output = ON_EXIT
transfer_input_files = C:/Users/OmegaAdmin/Desktop/test_case/two.R

log = test_input.log
output = test_input.out
error = test_input.err

queue 

感谢您对此的任何想法。

谢谢,

4

2 回答 2

2

这不是 R 相关的问题,而是可访问性的问题。错误消息对我来说似乎很清楚:服务器对该文件没有读取权限。确保您共享要读取的文件或文件夹。我不知道无论您身在何处的网络和集群的设置是什么,但您最好联系管理员询问您如何将文件保存到正确的位置地方。

还要确保如果您将文件传输到服务器/集群,则调整您的 R 脚本,使其指向正确的目录。这可能不是你自己的硬盘...

于 2010-08-27T14:07:16.713 回答
1

当你说

transfer_input_files = C:/Users/OmegaAdmin/Desktop/test_case/two.R

这告诉 Condor 在作业开始时将 two.R 复制到当前工作目录中。当前工作目录是专门创建的工作区,而不是(通常)主目录。因此,我希望完整路径看起来像

C:/condor/execute/dir_28412/two.R

然而,R实际上是在寻找

C:/Users/pcname/Desktop/test_case/two.R

为什么R在那儿看?one.R 是否可能会说“在 $HOME/Desktop/test_case 中查找 two.R”?它是否可能会说“在 Desktop/testcase/two.R 中查看”并且 R 具有想要查看相对于用户主目录的配置?

解决方案几乎可以肯定是修改 one.R 或您的 R 配置以在当前工作目录中查找 two.R。如果由于某种原因 R 改变了它的当前工作目录,环境变量 _CONDOR_SCRATCH_DIR 应该包含它。


在相关说明中,您说:

arguments = one.R
input = one.R

第一个是传递给 Rscript.exe 的参数,我猜它告诉 R 加载并运行一个名为 one.R 的文件。除了那个脚本不存在!如果你想让它工作,你需要将它添加到 transfer_input_files。但它显然似乎有效;为什么?因为"input=one.R"意味着“获取 one.R 的内容并将其作为标准输入通过管道输入到 Rscript.exe;就像您输入这些内容一样。” 我猜您可以删除参数,或删除输入并将 one.R 添加到您的 transfer_input_files 中,从而消除歧义。

于 2010-09-03T20:47:06.157 回答