3

我想我有一个简单的问题,因为我在互联网上上下查找并找不到其他人问这个问题:我的大学有一个 Condor 设置。我想多次重复相同的代码(例如 100 次)。我的 R 代码有一个将结果存储在文件中的例程,即:

write.csv(res, file=paste(paste(paste(format(Sys.time(), '%y%m%d'),'res', queue, sep="_"), sep='/'),'.csv',sep='',collapse=''))

res 是我的结果(一个 data.frame),我指出这个文件包含带有“res”的结果,最后我想添加这个计算的队列号(否则文件将被替换,不是吗?)。它应该看起来像:140109_res_1.csv、140109_res_2.csv、...

我向秃鹰提交的文件如下所示:

universe = vanilla
executable = /usr/bin/R 
arguments =  --vanilla 
log =  testR.log
error = testR.err
input = run_condor.r
output = testR$(Process).txt
requirements = (opsys == "LINUX") && (arch == "X86_64") && (HAS_R_2_13 =?= True)
request_memory = 1000
should_transfer_files = YES
transfer_executable = FALSE
when_to_transfer_output = ON_EXIT
queue 3

我想知道如何将“队列”编号输入我的 R 代码?我尝试了一个简单的例子

print(queue)
print(Queue)

但是没有找到名为 queue 或 Queue 的对象。有什么建议么?最好的祝愿,马可

4

1 回答 1

2

好的,我解决了这个问题。事情是这样的:

  1. 我不得不更改我的提交文件。我将插槽参数更改为:

    参数 = --vanilla --args $(进程)

  2. 现在进程号被转发到 R 代码。在那里,您可以使用以下行检索它。该值将作为字符存储。因此,您应该将其转换为数值(还要检查像 10 这样的数字是否作为“1”和“0”传递,在这种情况下,您还应该折叠这些值)。

    运行 <- commandArgs(TRUE)

这是我运行的代码示例。

> run <- commandArgs(TRUE)
> run
[1] "0"
> class(run)
[1] "character"
> try(as.numeric(run))
[1] 0
> try(run <- as.numeric(paste(run, collapse='')) )
> try(print(run))
[1] 0
> try(write(run, paste(run,'csv', sep='.')))

您还可以在此处找到如何将变量/参数传递给您的代码的信息:http ://research.cs.wisc.edu/htcondor/manual/v7.6/condor_submit.html

我希望这对任何人都有帮助。干杯并感谢所有其他评论者!马可

于 2014-01-09T12:21:21.657 回答