source
位于 base
包(package)。 说明
source
原因R直接接受来自指定文件、URL、连接或表达式的输入。输入被读取并且parse
d 从该文件直到到达文件末尾,然后在所选环境中按顺序计算已解析的表达式。
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 的路径名的字符串。 |
local |
|
echo |
逻辑性;如果 |
print.eval, print. |
逻辑性;如果 |
exprs |
对于 对于 |
evaluated |
逻辑表明 |
spaced |
逻辑指示是否应在每个表达式之前打印换行符(因此为空行)(当 |
verbose |
如果 |
prompt.echo |
特点;如果 |
max.deparse.length |
整数;仅当 |
width.cutoff |
整数,传递给 |
deparseCtrl |
|
chdir |
逻辑性;如果 |
encoding |
字符向量。当 |
continue.echo |
特点;如果 |
skip.echo |
整数;如果 |
keep.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
使用 source
; eval
、parse
和 scan
; options("keep.source")
。
sys.source
这是将文件源到环境中的简化版本。
“R 语言定义”,用于讨论源指令。
相关用法
- R solve 求解方程组
- R sort 对向量进行排序或排序
- R socketSelect 等待套接字连接
- R strsplit 分割字符向量的元素
- R seq.Date 生成规则的日期序列
- R search 给出 R 对象的搜索路径
- R scan 读取数据值
- R sprintf 使用 C 风格字符串格式化命令
- R stop 停止函数执行
- R sign 标志函数
- R svd 矩阵的奇异值分解
- R strtoi 将字符串转换为整数
- R sQuote 引用文字
- R switch 选择替代方案列表之一
- R substitute 替换和引用表达式
- R strrep 重复字符向量的元素
- R split 分组并重新集合
- R slice.index 数组中的切片索引
- R standardGeneric 形式化方法系统 – 调度 S4 方法
- R sequence 创建序列向量
- R startsWith 字符串是否以另一个字符串开头或结尾?
- R system.file 查找 R 系统文件的名称
- R sample 随机样本和排列
- R strwrap 将字符串换行以设置段落格式
- R seek 重新定位连接的函数
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Read R Code from a File, a Connection or Expressions。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。