我有一个提交给神鹰的R作业,提交给神鹰的R文件(one.R)正在读取另一个R文件(two.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
对此有任何想法。
谢谢,
答案 0 :(得分:2)
这不是与R相关的问题,而是可访问性问题。我似乎很清楚错误消息:服务器没有该文件的读取权限。确保您共享要读入的文件或文件夹。我不知道您所在的网络和群集的设置是什么,但您最好联系管理员询问如何将文件提供给您地方。
还要确保如果将文件传输到服务器/群集,则需要调整R脚本以使其指向正确的目录。这可能不是你自己的硬盘......
答案 1 :(得分: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中找到两个。”吗?它是否可能会说“Look in 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,消除歧义。