如果您好奇的话,这是我遇到的问题的背景(可能没有必要,因此您可以在此处跳过第一行):
我当前正在编写一个脚本(multi_gene
),该脚本在其中读取另一个R脚本(sngle_gene
)并运行该脚本。应该执行一个循环,以便它将运行sngle_gene
的多次迭代。 sngle_gene
脚本也可以通过从命令行调用参数来工作,因此,我一直在尝试找出一种方法,让multi_gene
脚本输入这些参数(这样我就不必编辑sngle_gene
脚本,以便它仍然可以从命令行获取参数。
我的解决方案是让multi_gene
在源命令的末尾添加所有命令行参数:
source(paste(paste(directory, "sngle_gene.R", sep = ""), arguments, sep = " "))
背景,这是我的问题:
我想读取参数输入的数据帧,以便我正在创建的循环遍历表中的每一行,并将每一行用作{{1}的参数列表(字符串和数字) }。在我的脑海中,它将输出为某行:
arguments
我尝试使用以下方法从表中提取单行:
/directory/sngle_gene.R argument1 argument2 argument3 etc
似乎提供了我的论证清单,但随后它像这样打印出来:
arguments = unlist(test_df[1, ], use.names = F)
我不太确定如何解决该问题,以便全部解决。任何帮助表示赞赏。
编辑以进行澄清:另外,我知道使用/directory/sngle_gene.R argument1
/directory/sngle_gene.R argument2
只会读取第一行。在循环中,我使用变量而不是数字。
答案 0 :(得分:2)
要对行进行隐式循环,请使用apply
,并将参数MARGIN
设置为1
:
test_df <- data.frame(arg1 = c("arg1.1", "arg1.2", "arg1.3"),
arg2 = c("arg2.1", "arg2.2", "arg2.3"))
test_df
# arg1 arg2
# 1 arg1.1 arg2.1
# 2 arg1.2 arg2.2
# 3 arg1.3 arg2.3
script.name <- "/directory/sngle_gene.R"
res <- data.frame(cmdline = paste(script.name, apply(test_df, 1, function(x) paste(x, collapse = " "))))
res
# cmdline
# 1 /directory/sngle_gene.R arg1.1 arg2.1
# 2 /directory/sngle_gene.R arg1.2 arg2.2
# 3 /directory/sngle_gene.R arg1.3 arg2.3