Передача нескольких переменных Perl в R - PullRequest
0 голосов
/ 25 апреля 2018

Введение

В настоящее время я работаю с существующим проектом Perl / R. Мне нужно передать несколько переменных со страницы Perl в R-скрипт. Этот проект в настоящее время использует пример, как показано ниже.

var.pl -> test.R

Вопрос 1

Мне было интересно, есть ли более достаточный способ передать несколько переменных. Может быть, через хеш или объект? По двум причинам:

  1. Чтобы передать только один аргумент вместо 10
  2. Чтобы иметь какой-то идентификатор для каждой переменной

Вопрос 2

На самом деле есть еще один слой (index.pl веб-страница), который использует href для вызова var.pl :

index.pl -> var.pl -> test.R

Этот index.pl содержит тег, который вызывает var.pl и передает параметры. Скрипт var.pl не устанавливает переменные для строк, как показано ниже, но устанавливает свои переменные для переданных параметров. Можно ли вызвать скрипт R (включая параметры), чтобы перейти от index.pl прямо к test.R?

index.pl

my $var1 = 'testA';
my $var2 = 'testB';
my $var3 = 'testC';
print '<a href="var.pl?a='.$var1.'&b='.$var2.'&c='.$var3.'">Go</a>';

var.pl

use CGI qw/:standard :html3/;
use DBI;
use strict;
use warnings;

my $a = param('a');
my $b = param('b');
my $c = param('c');

my $cmd = "Rscript test.R $a $b $c"

open(PROG, "$cmd |");
while (<PROG>) {
    chomp;
}
close(PROG);

test.r

arg <- commandArgs(trailingOnly = TRUE);

a = arg[1]
b = arg[2]
c = arg[3]


# I will do something with the variables

1 Ответ

0 голосов
/ 22 мая 2018

Я использовал это решение:

Я создал таблицу в MySQL, куда я вставляю все параметры.Я создал datetamp + userid в качестве первичного ключа, который я передаю в сценарий R.Скрипт R использует библиотеку RMySQL и извлекает все параметры (с заданной меткой даты в качестве параметра)

Perl

  • Создает переменную $ datetamp (datetamp +ID пользователя)
  • Вставить в базу данных все переменные с $ datetamp в качестве первичного ключа
  • my $ cmd = "Rscript test.R $ datetamp"

R

  • Извлекает все переменные из базы данных.

arg <- commandArgs (trailingOnly = TRUE); </p>

datetamp = arg [1]

часть раздела RMySQL:

sql = sprintf ("выберите * из TEMP, где id = '% s';", метка даты)
rs <-dbSendQuery (con, sql) </p>

...