我有一个提交给秃鹰的R作业,提交给秃鹰的R文件(一个R)正在读取另一个R文件(两个R),当我将该作业提交给秃鹰时,它失败了原因是提交的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
赞赏任何想法。
谢谢,
当你说
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中找到2.R”?它是否可能会说“在Desktop / testcase / two.R中查找”,并且R具有想要相对于用户主目录进行查看的配置?
几乎可以肯定的解决方案是修改一个.R或您的R配置,以在当前工作目录中查找两个.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;就像您在其中键入这些内容一样。”我猜想您可以删除参数,也可以删除输入,然后在transfer_input_files中添加one.R,从而消除歧义。
这不是与R相关的问题,而是可访问性问题。错误消息对我来说似乎很清楚:服务器没有该文件的读取权限。确保共享要读取的文件或文件夹。我不知道网络和群集的设置如何,无论您身在何处,但最好与管理员联系,以询问如何正确获取文件的地方。
还请确保如果将文件传输到服务器/群集,则应调整R脚本,使其指向正确的目录。可能不是您自己的硬盘...