Извлечение строки из кадра данных и вывод в виде одной строки в R - PullRequest
0 голосов
/ 06 декабря 2018

Если вам интересно, это немного фона для моего вопроса (возможно, нет необходимости, так что вы могли бы пропустить первый бит здесь):

Я сейчас пишу скрипт(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 = " "))

Справочная информация по , вот мой вопрос:

Я хочу прочитать в кадре данных аргументы для ввода, чтобы цикл, который я создаю, проходил через каждую строку в таблице ииспользуйте каждую строку в качестве списка аргументов (которые являются строками и числами) для 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

И я не совсем уверен, как это исправить, чтобы все получилось в одной строке.Любая помощь приветствуется.

Редактировать для уточнения: Кроме того, я знаю, что использование test_df[1,] просто прочитает первый ряд.В цикле я использую переменную вместо числа.

1 Ответ

0 голосов
/ 06 декабря 2018

Для неявного цикла по строкам используйте 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
...