当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R source 从文件、连接或表达式中读取 R 代码


R语言 source 位于 base 包(package)。

说明

source原因R直接接受来自指定文件、URL、连接或表达式的输入。输入被读取并且parsed 从该文件直到到达文件末尾,然后在所选环境中按顺序计算已解析的表达式。

withAutoprint(exprs)是一个包装器source(exprs = exprs, ..)具有不同的默认值。它的主要目的是像在顶级上下文中一样评估 auto-print 表达式,例如,如R安慰。

用法

source(file, local = FALSE, echo = verbose, print.eval = echo,
       exprs, spaced = use_file,
       verbose = getOption("verbose"),
       prompt.echo = getOption("prompt"),
       max.deparse.length = 150, width.cutoff = 60L,
       deparseCtrl = "showAttributes",
       chdir = FALSE,
       encoding = getOption("encoding"),
       continue.echo = getOption("continue"),
       skip.echo = 0, keep.source = getOption("keep.source"))

withAutoprint(exprs, evaluated = FALSE, local = parent.frame(),
              print. = TRUE, echo = TRUE, max.deparse.length = Inf,
              width.cutoff = max(20, getOption("width")),
              deparseCtrl = c("keepInteger", "showAttributes", "keepNA"),
              ...)

参数

file

connection 或给出要读取的文件或 URL 的路径名的字符串。 stdin() 连接在交互时从控制台读取。

local

TRUEFALSE 或环境,确定解析表达式的计算位置。 FALSE(默认)对应于用户的工作空间(全局环境),TRUE 对应于调用 source 的环境。

echo

逻辑性;如果 TRUE ,则在解析之后、求值之前打印每个表达式。

print.eval, print.

逻辑性;如果 TRUE ,则为每个表达式 i 打印 eval(i) 的结果;默认为 echo 的值。

exprs

对于 source()withAutoprint(*, evaluated=TRUE) :不指定 file ,而是指定 expressioncallcalllist ,但不是未计算的 “expression” 。

对于 withAutoprint() (默认为 evaluated=FALSE ):一个或多个未计算的 “expressions”。

evaluated

逻辑表明 exprs 被传递到 source(exprs= *) 因此必须进行评估,即正式的 expressioncalllist 调用。

spaced

逻辑指示是否应在每个表达式之前打印换行符(因此为空行)(当 echo = TRUE 时)。

verbose

如果 TRUE ,则在解析和评估输入期间会打印更多诊断信息(不仅仅是 echo = TRUE ),包括每个表达式的额外信息。

prompt.echo

特点;如果 echo = TRUE 给出要使用的提示。

max.deparse.length

整数;仅当 echoTRUE 时使用,并给出单个表达式的解析输出的最大字符数。

width.cutoff

整数,传递给deparse(),(仅)在没有源引用时使用。

deparseCtrl

character向量,传递为controldeparse(), 也可以看看.deparseOpts。在R版本 <= 3.3.x,这被硬编码为"showAttributes",目前默认;deparseCtrl = "all"当严格的向后兼容性并不重要时,可能更可取。

chdir

逻辑性;如果TRUEfile是一个路径名,R工作目录暂时更改为包含的目录file用于评估。

encoding

字符向量。当 file 是字符串时假定的编码:参见 file 。当猜测编码时,可能的值为"unknown":请参阅“编码”部分。

continue.echo

特点;如果 echo = TRUE 则给出在连续行上使用的提示。

skip.echo

整数;如果 echo = TRUE 则要跳过文件开头的多少注释行。

keep.source

逻辑:如果可能的话,在回显表达式时是否应该保留源格式?

...

(对于 withAutoprint() :) 将进一步(非文件相关)参数传递给 source(.)

细节

请注意,通过运行代码source与在R命令行。由于表达式不在顶层执行,因此 auto-printing 未完成。所以你需要包含明确的print调用您想要打印的内容(请记住,这包括通过lattice,常见问题解答 Q7.22)。由于在运行任何文件之前都会解析完整的文件,因此语法错误会导致任何代码都不会运行。如果在运行语法正确的脚本时发生错误,则通过已运行的代码分配到工作区的任何内容都将被保留(就像从命令行一样),但诊断信息,例如traceback()将包含额外的调用withVisible.

所有版本的R接受来自带有 LF(在 Unix 上使用)、CRLF(在 DOS/Windows 上使用)或 CR(在经典 Mac OS 上使用)标记的行尾的连接的输入,并将其映射到换行符。最后一行可能不完整,即缺少最后的行尾标记。

如果 keep.source 为 true(交互式使用中的默认值),则保留函数源,以便可以将它们准确地列为输入。

与控制台输入不同,文件中或连接上的行可以包含无限数量的字符。

skip.echo > 0 时,文件开头的许多注释行将不会被回显。这根本不影响代码的执行。如果前skip.echo 行中有可执行行,则回显将从第一行开始。

如果 echo 为 true 并且解析表达式超过 max.deparse.length ,则输出那么多字符,后跟 .... [TRUNCATED]

编码

默认情况下,以当前编码读取并解析输入R会议。这通常是所需要的,但有时需要重新编码,例如如果要在 Windows 上读取来自使用 UTF-8 的系统的文件(或反之亦然)。

如果 file 是实际文件名或 URL(而不是连接),则本段的其余部分适用。如果 encoding = "unknown" ,则尝试猜测编码:localeToCharset() 的结果用作指导。如果encoding有两个或多个元素,则依次尝试它们,直到可以在尝试编码中无错误地读取文件/URL。如果在 Latin-1 或 UTF-8 语言环境中指定了实际的 encoding (而不是默认值或 "unknown" ),则结果中的字符串将被转换为当前编码并进行标记(请参阅 Encoding )。

如果 file 是一个连接,则无法对 source 内的输入重新编码,因此 encoding 参数仅用于标记 Latin-1 和 UTF-8 语言环境中已解析输入中的字符串:参见parse

例子

someCond <- 7 > 6
## want an if-clause to behave "as top level" wrt auto-printing :
## (all should look "as if on top level", e.g. non-assignments should print:)
if(someCond) withAutoprint({
   x <- 1:12
   x-1
   (y <- (x-5)^2)
   z <- y
   z - 10
})

## If you want to source() a bunch of files, something like
## the following may be useful:
 sourceDir <- function(path, trace = TRUE, ...) {
    op <- options(); on.exit(options(op)) # to reset after each 
    for (nm in list.files(path, pattern = "[.][RrSsQq]$")) {
       if(trace) cat(nm,":")
       source(file.path(path, nm), ...)
       if(trace) cat("\n")
       options(op)
    }
 }

suppressWarnings( rm(x,y) ) # remove 'x' or 'y' from global env
withAutoprint({ x <- 1:2; cat("x=",x,"\n"); y <- x^2 })
## x and y now exist:
stopifnot(identical(x, 1:2), identical(y, x^2))

withAutoprint({ formals(sourceDir); body(sourceDir) },
              max.deparse.length = 20, verbose = TRUE)

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

demo 使用 sourceevalparsescanoptions("keep.source")

sys.source 这是将文件源到环境中的简化版本。

“R 语言定义”,用于讨论源指令。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Read R Code from a File, a Connection or Expressions。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。