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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。