从数据框提取行并在R中作为单行输出

时间:2018-12-06 17:16:43

标签: r subset

如果您好奇的话,这是我遇到的问题的背景(可能没有必要,因此您可以在此处跳过第一行):

我当前正在编写一个脚本(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 只会读取第一行。在循环中,我使用变量而不是数字。

1 个答案:

答案 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