13

我是 unix 的外行,到目前为止我在 Windows 中使用 R。例如,我在我的 R 会话(在 R gui 中)中键入以下内容。

# this is a my funny example script 
X <- 1:10
Y <- 21:30
plot(X, Y)
myfun <- function (x){
              x1 <- x^0.2
              return (x1)
             }
myfun(X)

在两种情况下,如何在 unix shell 中实现这一点 -

(1)通过interpeter直接在命令行中(2)创建脚本并运行脚本。

考虑到我是 unix 的外行,请提供步骤。

4

4 回答 4

25

假设您将脚本保存在一个名为 的简单文本文件中,您可以通过在提示符so.R下键入来在 Linux/Unix 下运行它。R一旦进入 R 输入

  source('so.R')

在 R 环境中执行脚本(假设 so.R 文件与您发出此命令时位于同一目录中)。

要从 Linux/Unix 命令行运行脚本,请使用以下命令:

  R CMD BATCH so.R

请注意,当我在 R 中运行脚本时,我得到了要显示的图,但是从 Linux 命令行它没有显示。我怀疑它会很快显示然后消失,因此您必须查找一个 R 命令以使其在显示绘图后暂停。

于 2012-05-15T15:16:55.533 回答
1

下面的示例显示了在 shell 脚本中运行 R 代码的两种方法。如果脚本通过 source() 函数加载到交互式 R 会话,这两个示例也将定义函数而不执行它们。

第一个示例允许您像向任何其他 shell 脚本一样提供参数,但不会将额外的 R 选项传递给 R(因为 Rscript 将“--args”作为参数之一提供给 R)。

第二个示例允许您提供额外的 R 选项,但会生成(无害的)警告消息,除非您将“--args”作为脚本参数之一。除非您有特殊要求,否则最好避免使用此版本。

原型-Rscript.r

#!/usr/bin/env Rscript
# Prototype R script for use at command line in Linux, Mac OS X, UNIX

# References:
#   Manual "A Introduction to R", available via help.start() from the R Console
#   Appendix "B.1 Invoking R from the command line" in "A Inroduction to R",

showArguments <- function(argv)  {
    print(argv)
    0
}

if ( ! interactive() )  {
    # set some error return codes
    SCRIPT_ERROR <- 10                      # see documentation for quit()
    SCRIPT_ARG_ERROR <- SCRIPT_ERROR + 1

    # Define ARGV as script path concatenated to script arguments
    ARGV <- commandArgs(FALSE)          # start with all the arguments given to R
    scriptPath <- sub("^--file=", "", grep("^--file=", ARGV, value=TRUE)) [[1]]
    ARGV <- c(scriptPath, commandArgs(TRUE))

    if (length(ARGV) < 2)   {
        cat(file=stderr(), sep="",
            "Usage: ", ARGV[[1]], " [ options ] item ...\n",
            "       Do something with item\n",
            "       See script for details\n")
        quit(save="no", status=SCRIPT_ARG_ERROR)
    }
    quit(save="no", status=showArguments(ARGV))
}

原型-shellscript.r

#!/usr/bin/env R --slave --vanilla --quiet -f
# Prototype R script for use at command line in Linux, Mac OS X, UNIX

# References:
#   Manual "A Introduction to R", available via help.start() from the R Console
#   Appendix "B.1 Invoking R from the command line" in "A Inroduction to R",

showArguments <- function(argv)  {
    print(argv)
    0
}

if ( ! interactive() )  {
    # set some error return codes
    SCRIPT_ERROR <- 10                      # see documentation for quit()
    SCRIPT_ARG_ERROR <- SCRIPT_ERROR + 1

    # Define ARGV as the arguments given to this script (after argument “-f”)
    ARGV <- commandArgs(FALSE)          # start with all the arguments given to R
    ARGV <- ARGV[(grep("-f", ARGV) [[1]] + 1):length(ARGV)]
    if ( any(grepl("--args", ARGV) ))   {   # remove arguments intended only for R
        ARGV <- c(ARGV[[1]], commandArgs(TRUE))
    }

    if (length(ARGV) < 2)   {
        cat(file=stderr(), sep="",
            "Usage: ", ARGV[[1]], " [ R_options ] --args [ options ] item ...\n",
            "       Do something with item\n",
            "       See script for details\n")
        quit(save="no", status=SCRIPT_ARG_ERROR)
    }
    quit(save="no", status=showArguments(ARGV))
}
于 2014-01-11T22:54:58.567 回答
1

我从您提出问题的方式猜测您可能通过 SSH 连接到一台 linux 机器?或者您在常用的笔记本电脑/PC 上安装了 Ubuntu。

假设是第二种情况:打开终端并输入sudo apt-get install r-base. 然后键入R。然后输入

X <- 1:10
Y <- 21:30
plot(X, Y)
myfun <- function (x){
              x1 <- x^0.2
              return (x1)
             }
myfun(X)

由于您的问题是关于unixvslinux而不是R,您也可以尝试http://unix.stackexchange.com。关于 linux 和 unix 之间的区别有很多话要说,但您可能需要知道的是:下载 Ubuntu,将其刻录到光盘上,然后使用 CD 驱动器中的光盘重新启动计算机。

希望这可以帮助。

于 2013-02-16T00:19:10.247 回答
1

如果您的程序要处理单个数据集,那么 simple-r 可能是解决方案:

http://code.google.com/p/simple-r/

它专为简单的统计分析而设计,作为 Linux 命令行的一部分。例如,如果想绘制一些数据,'r -p data.txt' 就可以了;获得相关系数:'r cor data.txt'就足够了。

于 2013-09-30T18:35:14.870 回答