【问题标题】:How to call Perl variable in R and Shell script?如何在 R 和 Shell 脚本中调用 Perl 变量?
【发布时间】:2018-12-26 07:35:39
【问题描述】:

我有一个 Shell 脚本和一个 R 脚本都与 Perl 脚本链接。在 Perl 脚本中有用户定义路径,我也想将该路径用于 Shell 脚本和 R 脚本。需要进行哪些更改? 这是 Perl 脚本:

print "Enter the path to your input file:";
chomp(my $user_path = <STDIN>);
my $path = $user_path // $default_path;  # $path  is path for Perl script
print "The path we'll use is: $path";
........................
........

这是 R 脚本:

x <- read.table($path."/text.txt", header=F) # how to introduce $path as path for R script
library(plyr)
df <- ddply(x, .(x$V1,x$V2, x$V3), nrow)
..............
.............

($path) 适用于 Perl 脚本,但不适用于 R。我想在 R 和 Shell 脚本中调用 Perl 变量 ($path)。如何在 R 和 Shell 脚本中使用 $path 作为路径?

【问题讨论】:

  • 您能解释一下 Perl 脚本、shell 脚本和 R 脚本是如何协同工作的吗? Perl 脚本是否调用 shell 脚本? Perl 脚本是否调用 R 脚本?最简单的方法是将 $path 作为命令行参数传递给 shell 脚本和 R 脚本。
  • @Corion 有一个 Perl 脚本,它首先调用一个 shell 脚本,然后调用 R 脚本。
  • 那么是什么阻止您将$path 传递给shell 脚本,然后从shell 脚本传递给R 脚本?
  • 我将路径保存在变量 $path 中(在 Perl 脚本中)。所以对于 Perl 脚本它可以正常工作,但是当 Shell 脚本或 R 脚本出现时,它无法检测到 $path,所以它会出错。请参阅 R 脚本中的编辑:所以,我不知道如何引入 $path 作为 Shell 脚本和 R 脚本的路径。
  • 是的。脚本之间不共享变量。您需要明确地传递它们。在您的 Perl 代码中,您启动 shell 脚本。在那里,您必须将$path 变量作为参数传递,并且在shell 脚本中,您必须将其传递给R 脚本。也可以使用环境传值:$ENV{ MY_APP_PATH } = $path,然后在R中Sys.getenv(c("MY_APP_PATH"))

标签: r shell perl


【解决方案1】:

只需在 systemexec ini perl 上使用 $path 作为参数。它会将 arg 发送到 shell 脚本,然后将其用作 Rscript 的 arg。

例如,我有 3 个脚本。我们开始吧。

root@analist:~/test# cat file.pl
#!/usr/bin/perl
#Input file
print "[Perl] Enter file:";
chomp(my $filepath = <STDIN>);
#Send to bash script
my @cmd = ('./file.sh');
push @cmd, $filepath;
system(@cmd);
root@analist:~/test# cat file.sh
#!/bin/bash
echo "[Bash] Filename: $1"
Rscript file.R $1
root@analist:~/test# cat file.R
args <- commandArgs(TRUE)
fileTxt <- args[1]
cat(paste('[R] File:', fileTxt, '\n'))
root@analist:~/test# ./file.pl
[Perl] Enter file:test.txt
[Bash] Filename: test.txt
[R] File: test.txt

我希望这个答案能有所帮助。

【讨论】:

  • 这个程序将如何工作?请您详细说明一下。
猜你喜欢
  • 2012-10-17
  • 2011-02-27
  • 2014-07-26
  • 2020-05-01
  • 1970-01-01
  • 2019-07-06
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多