當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R connections 操作連接的函數(文件、URL...)


R語言 connections 位於 base 包(package)。

說明

創建、打開和關閉連接的函數,即“generalized files”,例如可能的壓縮文件、URL、管道等。

用法

file(description = "", open = "", blocking = TRUE,
     encoding = getOption("encoding"), raw = FALSE,
     method = getOption("url.method", "default"))

url(description, open = "", blocking = TRUE,
    encoding = getOption("encoding"),
    method = getOption("url.method", "default"),
    headers = NULL)

gzfile(description, open = "", encoding = getOption("encoding"),
       compression = 6)

bzfile(description, open = "", encoding = getOption("encoding"),
       compression = 9)

xzfile(description, open = "", encoding = getOption("encoding"),
       compression = 6)

unz(description, filename, open = "", encoding = getOption("encoding"))

pipe(description, open = "", encoding = getOption("encoding"))

fifo(description, open = "", blocking = FALSE,
     encoding = getOption("encoding"))

socketConnection(host = "localhost", port, server = FALSE,
                 blocking = FALSE, open = "a+",
                 encoding = getOption("encoding"),
                 timeout = getOption("timeout"),
                 options = getOption("socketOptions"))

serverSocket(port)

socketAccept(socket, blocking = FALSE, open = "a+",
             encoding = getOption("encoding"),
             timeout = getOption("timeout"),
             options = getOption("socketOptions"))

open(con, ...)
## S3 method for class 'connection'
open(con, open = "r", blocking = TRUE, ...)

close(con, ...)
## S3 method for class 'connection'
close(con, type = "rw", ...)

flush(con)

isOpen(con, rw = "")
isIncomplete(con)

socketTimeout(socket, timeout = -1)

參數

description

字符串。連接的說明:請參閱“詳細信息”。

open

字符串。有關如何打開連接的說明(如果最初應打開連接)。有關可能的值,請參閱“模式”部分。

blocking

合乎邏輯的。請參閱“阻止”部分。

encoding

要采用的編碼的名稱。請參閱“編碼”部分。

raw

合乎邏輯的。如果為 true,則使用 ‘raw’ 接口,該接口更適合非常規文件的參數,例如字符設備。這會在打開文本模式讀取時抑製對壓縮文件的檢查,並斷言 ‘file’ 可能不可查找。

method

字符串,部分匹配c("default", "internal", "wininet", "libcurl"):請參閱“詳細信息”。

headers

在 HTTP 請求中使用的 HTTP 標頭的命名字符向量。對於非 HTTP URL,它會被忽略。來自 HTTPUserAgent 選項(請參閱 options )的 User-Agent 標頭自動用作第一個標頭。

compression

0-9 之間的整數。寫入時要應用的壓縮量,從無到最大可用。對於 xzfile 也可以為負數:請參閱“壓縮”部分。

timeout

數字:用於此連接的超時(以秒為單位)。請注意,某些操作係統可能會將非常大的值視為零:但是 POSIX 標準要求支持長達 31 天的值。

options

帶有選項的可選字符向量。目前 TCP 套接字僅支持"no-delay"

filename

zip 文件中的文件名。

host

字符串。端口的主機名。

port

整數。 TCP 端口號。

server

合乎邏輯的。套接字應該是客戶端還是服務器?

socket

監聽連接的服務器套接字。

con

一個連接。

type

字符串。目前被忽略。

rw

字符串。空或 "read""write" ,允許部分匹配。

...

傳遞給其他方法或從其他方法傳遞的參數。

細節

前十一個函數創建連接。默認情況下,連接不會打開(除了 socketConnectionsocketAccept 創建的套接字連接以及 serverSocket 創建的服務器套接字連接),但可以通過設置參數 open 的非空值來打開連接。

為了file說明是要打開的文件的路徑(當base path.expand完成)或完整的 URL(當它與調用相同時)url), 或者""(默認)或"clipboard"(請參閱“剪貼板”部分)。使用"stdin"引用進程的C-level“標準輸入”(不需要連接到控製台或嵌入式版本中的任何內容)R,並且不在RGui在 Windows 上)。也可以看看stdin()對於略有不同的 R-level 概念stdin.看nullfile()以獨立於平台的方式獲取空設備的文件名。

為了url說明是一個完整的 URL,包括方案(例如‘⁠http://⁠', '⁠https://⁠', '⁠ftp://⁠' 或者 '⁠文件://⁠’)。方法"internal"自從引入連接以來就可以使用,但現在本質上已經不存在了。方法"wininet"僅在 Windows 上可用(它使用該操作係統的 WinINet 函數)和方法"libcurl"(使用該名稱的庫:https://curl.se/libcurl/) 現在是必需的,但以前在 Windows 上是可選的R4.2.0。方法"default"目前使用的方法"internal"為了 '⁠文件://⁠’ 網址和"libcurl"對於所有其他人。哪些方法支持哪些方案因情況而異R版本 - 當前"internal"僅支持‘⁠文件://⁠’;"wininet"支持‘⁠文件://⁠', '⁠http://⁠' 和 '⁠https://⁠’。可以指定代理:參見download.file.

對於 gzfile ,說明是由 gzip 壓縮的文件的路徑:它還可以打開以讀取未壓縮的文件以及由 bzip2xzlzma 壓縮的文件。

對於 bzfile ,說明是由 bzip2 壓縮的文件的路徑。

對於 xzfile,說明是由 xz ( https://en.wikipedia.org/wiki/Xz ) 或(隻讀)lzma ( https://en.wikipedia.org/wiki/LZMA ) 壓縮的文件的路徑。

unz以二進製模式讀取(僅)zip 文件中的單個文件。說明是 zip 文件的完整路徑,帶有‘。壓縮' 如果需要的話擴展。

為了pipe說明是要通過管道傳入或傳出的命令行。這是在由指定的 Windows 上的 shell 中運行的COMSPEC環境變量。

對於fifo,說明是 fifo 的路徑。 (對 fifo 連接的支持是可選的,但它們在大多數 Unix 平台和 Windows 上都可用。)

其意圖是filegzfile通常可用於文本輸入(來自文件,‘⁠http://⁠' 和 '⁠https://⁠’ URL)和二進製輸入。

opencloseseek 是通用函數:以下內容適用於與連接相關的方法。

open 打開連接。一般來說,使用連接的函數會在連接未打開時將其打開,然後再次關閉它們,因此要使連接保持打開狀態,請顯式調用open

close關閉並銷毀連接。如果不再存在,這將在適當的時候自動發生(帶有警告)R引用連接的對象。

flush 刷新為寫入/追加而打開的連接的輸出流(當前已實現,用於文件和剪貼板連接, stdoutstderr )。

如果對於 file 或(在大多數平台上)fifo 連接,說明為 "" ,則立即打開文件/fifo(在 "w+" 模式下,除非指定 open = "w+b")並從文件係統取消鏈接。這提供了一個臨時文件/fifo 來寫入然後讀取。

socketConnection(server=TRUE) 創建一個新的臨時服務器套接字,偵聽給定端口。一旦該端口上接受了新的套接字連接,服務器套接字就會自動關閉。 serverSocket 創建一個監聽服務器套接字,可用於通過 socketAccept 接受多個套接字連接。要停止偵聽新連接,需要通過 close 顯式關閉服務器套接字。

socketConnectionsocketAccept支持socket-specific選項的設置。目前僅實現了 "no-delay",它啟用了 TCP_NODELAY 套接字選項,導致套接字立即刷新發送緩衝區(而不是在發送之前等待收集所有輸出)。此選項對於需要快速請求/響應 turn-around 次的協議很有用。

socketTimeout 設置套接字連接的連接超時時間。可以給出負值timeout來查詢舊值。

file , pipe , fifo , url , gzfile , bzfile , xzfile , unz , socketConnection , socketAcceptserverSocket 返回一個連接對象,該對象繼承自類"connection",並具有第一個更具體的類。

openflush 無形地返回 NULL

close 以不可見方式返回 NULL 或整數狀態。該狀態來自上次關閉連接時的狀態,並且僅適用於某些類型的連接(例如管道、文件和 fifo):通常為零值表示成功。負值將導致警告;如果寫入,這些可能表明寫入失敗,不應忽略。

isOpen 返回一個邏輯值,表示連接當前是否打開。

isIncomplete 返回一個邏輯值,無論來自非阻塞連接的最後一次讀取嘗試是否未提供數據(當前沒有來自套接字或 readLines 中未終止的行的數據),或者對於輸出文本連接是否有未刷新的輸出。請參閱下麵的示例。

socketTimeout 返回套接字連接的舊超時值。

網址

urlfile支持 URL 方案‘⁠文件://⁠', '⁠http://⁠', '⁠https://⁠' 和 '⁠ftp://⁠’。

method = "libcurl"允許更多方案:到底哪些方案是依賴於平台的(參見libcurlVersion),但所有平台都支持‘⁠https://⁠’並且大多數平台都會支持‘⁠ftps://⁠’。

支持‘⁠ftp://⁠’計劃由"internal"方法已被棄用R4.1.1 並在中刪除R4.2.0。

大多數方法不使用percent-encode特殊字符,例如‘中的空格⁠http://⁠’ URL(參見URLencode),但似乎"wininet"方法確實如此。

關於‘⁠文件://⁠’ URL(無論參數如何,都由相同的內部代碼處理method)。最通用的形式(來自 RFC1738)是‘⁠文件://主機/路徑/到/文件⁠', 但R隻接受空的表格host字段指的是本地機器。

在類似 Unix 係統上,這就是‘⁠文件:///路徑/到/文件⁠', 在哪裏 '⁠路徑/到/文件⁠' 是相對於 '/’。因此,盡管第三個斜杠嚴格來說是規範的一部分而不是路徑的一部分,但這可以被視為指定文件的一種方式‘/路徑/到/文件’。無法使用文件 URL 指定相對路徑。

在這種形式中,路徑是相對於文件係統的根的,而不是 Windows 概念。 Windows 上的標準格式是‘⁠文件:///d:/R/repos⁠’:為了與早期版本兼容R和 Unix 版本,任何其他形式都被解析為R作為 '⁠文件://⁠’加上path_to_file。此外,即使 RFC1738 不允許,路徑中也接受反斜杠。

不嘗試解碼百分比編碼的‘⁠文件:⁠’ 網址:調用URLdecode如果需要的話。

所有方法都嘗試遵循重定向的 HTTP 和 HTTPS URL。

服務器端緩存的數據始終被接受。

函數 download.file 和幾個貢獻的包提供了更全麵的工具來從 URL 下載。

模式

參數 open 的可能值為

"r""rt"

以文本模式打開閱讀。

"w""wt"

打開以文本模式書寫。

"a""at"

打開以文本模式追加。

"rb"

以二進製模式打開讀取。

"wb"

打開以二進製模式寫入。

"ab"

打開以二進製模式追加。

"r+" , "r+b"

開放閱讀和寫作。

"w+" , "w+b"

打開以進行讀寫,最初截斷文件。

"a+" , "a+b"

打開以供閱讀和追加。

並非所有模式都適用於所有連接:例如 URL 隻能打開以供閱讀。隻能打開文件和套接字連接以進行讀取和寫入。不支持的模式通常會被悄悄替換。

如果在類 Unix 上創建文件或 fifo,其權限將是 umask 當前設置允許的最大權限(請參閱 Sys.umask )。

對於許多連接來說,文本模式和二進製模式之間幾乎沒有區別。對於 Windows 上的 file-like 連接,行結尾的轉換(LF 和 CRLF 之間)僅在文本模式下完成(但連接上的文本讀取操作如readLines,scansource適用於任何形式的行結束)。各種各樣的R操作隻能在其中一種模式下進行:例如pushBack是text-oriented,並且僅允許在打開的連接上以文本模式讀取,以及二進製操作,例如readBin,loadsave隻能在 binary-mode 連接上完成。

連接的模式在實際打開時確定,如果給出open = ""(除了套接字連接之外的所有連接的默認值),則會推遲連接的模式。對 open 的顯式調用可以指定模式,否則模式將為 "r" 。 ( gzfilebzfilexzfile 連接是例外,因為壓縮文件始終必須以二進製模式打開,並且即使在 Windows 上也不會完成 line-endings 的轉換,因此默認模式被解釋為 "rb" .) 大多數需要寫訪問或text-only 或binary-only 模式的操作將覆蓋尚未打開的連接的默認模式。

對於 compressed-file 連接,需要仔細考慮追加模式。他們是這樣不是在文件上生成單個壓縮流,而是將新的壓縮流附加到文件中。讀者可能會也可能不會閱讀超出第一個流末尾的內容:當前R這樣做是為了gzfile,bzfilexzfile連接。

壓縮

R支持gzip,bzip2xz壓縮(也是對其前體的隻讀支持,lzma壓縮)。

對於讀取,可以從文件的前幾個字節確定壓縮類型(如果有)。因此,對於 file(raw = FALSE) 連接,如果 open"""r""rt",則連接可以讀取任何壓縮文件類型以及未壓縮文件。 (使用"rb" 將允許逐字節讀取壓縮文件。)類似地,gzfile 連接可以在任何讀取模式下讀取任何形式的壓縮和未壓縮文件。

(如果未指定 open 並且存在該名稱的文件,則在創建連接時確定壓縮類型。如果打算打開連接以寫入文件,並在該名稱下使用不同形式的壓縮,請指定創建連接時的 open = "w" 或創建連接之前的文件 unlink。)

對於write-mode連接,compress指定壓縮器為最小化文件大小而工作的努力程度,較高的值需要更多的 CPU 時間和更多的工作內存(最多 800Mbxzfile(compress = 9))。為了xzfile的負值compress對應於添加xz參數-e:這需要更多時間(雙倍?)來壓縮,但可能會實現(稍微)更好的壓縮。默認(6)具有良好的壓縮性和適度的(100Mb 內存)使用量:但如果您使用xz壓縮 您可能正在尋找高壓縮。

選擇壓縮類型需要權衡:gzip,bzip2xz逐漸受到越來越少的支持,需要更多的資源來壓縮和解壓縮,並實現更多的壓縮(盡管個別文件可能會違背總體趨勢)。典型的經驗是bzip2文本文件的壓縮效果比gzip壓縮,以及xz最大壓縮比提高 30%。經驗與R save文件類似,但在一些大的‘.rda’ 文件xz壓縮比其他兩個好很多。即使使用當前的計算機減壓時間compress = 9通常情況下,讀取壓縮文件通常比未壓縮文件更快,因為磁盤活動減少了。

編碼

連接的輸入/輸出流的編碼可以通過名稱指定,其方式與 iconv 相同:請參閱幫助頁麵,了解如何找出您的平台上識別的編碼名稱。此外,"""native.enc" 都表示 ‘native’ 編碼,即當前語言環境的內部編碼,因此不會進行任何轉換。

當寫入文本連接時,連接代碼始終假設其輸入采用本機編碼,因此例如writeLines 必須將文本轉換為本機編碼。大多數係統上的本機編碼是 UTF-8(自 R 4.2 起,最近的 Windows 上也如此),並且可以表示所有字符。 writeLinesuseBytes=TRUE 時不會進行轉換(僅供專家使用,僅在使用除 UTF-8 之外的本機編碼的係統上有用),但連接代碼的行為仍然如同文本采用本機編碼一樣,因此任何嘗試在連接中轉換編碼( encoding 參數而不是 """native.enc" )將產生不正確的結果。

從文本連接讀取時,連接代碼將輸入重新編碼為本機編碼(根據 encoding 參數給出的編碼)。在 UTF-8 不是本機編碼的係統上,可以使用 readLinesscan 讀取本機編碼中無法表示的文本,方法是向它們提供一個未打開的連接,該連接是使用指定輸入的 encoding 參數創建的編碼。然後 readLinesscan 將指示連接代碼將文本轉換為 UTF-8 (而不是本機編碼),並且它們將返回標記(也稱為聲明,請參閱 Encoding )為 "UTF-8" 。最後,僅供專家使用,可以通過將連接的 """native.enc" 指定為 encoding 來禁用輸入重新編碼。但然後通過 readLinesscanencoding 參數將文本標記為 "UTF-8""latin1"

重新編碼僅適用於文本模式下的連接:從在二進製模式下指定的重新編碼的連接中讀取將讀取字節流,但混合文本和二進製模式讀取(例如,混合調用 readLinesreadChar )可能會導致錯誤的結果。

編碼 "UCS-2LE""UTF-16LE" 經過特殊處理,因為它們是 Windows“Unicode”文本文件的適當值。如果前兩個字節是字節順序標記 0xFEFF,則這些字節將被刪除,因為 iconv 的某些實現不接受 BOM。請注意,雖然大多數實現將使用編碼 "UCS-2" 處理 BOM 並選擇適當的字節順序,但有些實現(包括 glibc 的早期版本)不會。 "UTF-16""UCS-2" 之間有一個微妙的區別(請參閱 https://en.wikipedia.org/wiki/UTF-16 ):在需要代理對的“補充平麵”中使用字符非常罕見,因此 "UCS-2LE" 是合適的首選(因為它是更廣泛地實施)。

編碼 "UTF-8-BOM" 被接受讀取,並將刪除字節順序標記(如果存在)(通常用於 Microsoft 應用程序生成的文件和網頁)。如果在編寫時需要(不建議)BOM,則應明確編寫,例如通過writeChar("\ufeff", con, eos = NULL)writeBin(as.raw(c(0xef, 0xbb, 0xbf)), binary_con)

編碼名稱"utf8","mac""macroman"不可移植,並且不支持所有當前的R平台。"UTF-8"是便攜式的並且"macintosh"是“Mac Roman”的官方(也是最廣泛支持的)名稱。 (RMap"utf8""UTF-8"內部。)

請求不支持的轉換是一個錯誤,在連接打開時報告。當請求的翻譯因無效輸入而無法完成時,具體會發生什麽情況通常沒有記錄。輸出時的結果可能是錯誤,並帶有警告。在輸入時,很可能是直到錯誤為止的全部或部分輸入。

可能可以從 Sys.getlocale("LC_CTYPE") 推斷出當前的本機編碼,但並非所有操作係統都會記錄它。

阻塞

是否可以為文件、url(默認是)、fifo 和套接字連接(默認不是)指定連接塊。

在阻塞模式下,使用連接的函數不會返回到R評估器直到讀/寫完成。在非阻塞模式下,操作會盡快返回,因此在輸入時,它們將返回任何可用的輸入(可能沒有),而對於輸出,無論寫入是否成功,它們都將返回。

函數 readLines 在兩種模式下的最後一行不完整方麵的行為有所不同:請參閱其幫助頁麵。

即使連接處於阻塞模式,也會嘗試確保它不會阻塞事件循環,從而阻塞 GUI 部分的操作R。這些並不總是成功,而且整個R例如,在 Unix 上進行 DNS 查找期間,進程將被阻止。

HTTP/FTP URL 和套接字上的大多數阻塞操作都會受到由options("timeout")。請注意,這是無響應超時,而不是整個操作超時。超時是在連接打開時設置的(更準確地說,當該類型的最後一個連接時 - ‘⁠http:⁠', '⁠ftp:⁠’或套接字 - 已打開)。

先進先出

Fifos 默認為非阻塞。這遵循 S 版本 4,可能是最自然的,但它確實有一些影響。特別是,打開非阻塞 fifo 連接(僅)進行寫入將會失敗,除非有其他進程正在讀取該 fifo。

打開一個 fifo 進行讀寫(在任何模式下:隻能追加到 fifo)將 fifo 的兩側連接到R過程,並提供類似的設施file().

剪貼板

file隻能在"r"模式下與description = "clipboard"一起使用。這將讀取 X11 主選擇(請參閱 https://specifications.freedesktop.org/clipboards-spec/clipboards-latest.txt ),也可以將其指定為 "X11_primary" 並將輔助選擇指定為 "X11_secondary" 。在大多數係統上,剪貼板選擇(由“編輯”菜單中的“複製”使用)可以指定為 "X11_clipboard"

當打開剪貼板進行讀取時,內容會立即複製到連接中的內部存儲中。

希望寫入 X11 選擇之一的 Unix 用戶可以通過 xclip ( https://github.com/astrand/xclip ) 或 xsel ( https://www.vergenet.net/~conrad/software/xsel/ ) 進行操作,例如通過 pipe("xclip -i", "w") 作為主要選擇。

macOS 用戶可以使用 pipe("pbpaste")pipe("pbcopy", "w") 讀取和寫入該係統的剪貼板。

文件路徑

在大多數情況下,這些都會被轉換為本機編碼。

Windows 上的 filepipe 是例外,其中標記為 UTF-8 的 description 將作為 ‘wide’ 字符串傳遞到 Windows。這允許在使用 Unicode 文件名的文件係統(例如 NTFS 但不是 FAT32)上打開名稱不是本機編碼的文件。

'⁠ftp://⁠’ 網址

大多數現代瀏覽器不支持此類 URL,並且‘⁠https://⁠' 更適合用於R.

其目的是R將繼續允許此類 URLlibcurl確實如此,但隨著它們變得越來越少,這種情況也越來越未經測試。 ‘protocols’是什麽版本libcurl正在使用的支持可以通過調用查看libcurlVersion().

連接數

任何一次可以分配(不一定是打開)的連接數量是有限製的。完成後關閉連接是一個很好的做法,但如果有必要,garbage-collection 將被調用來關閉這些連接,而不需要任何連接。R引用它們的對象。

默認限製為128(包括三個終端連接,stdin,stdoutstderr)。當R使用該選項開始--max-connections=N,其中允許的最大值為 4096。

然而,許多類型的連接使用其他資源,這些資源本身是有限的。特別是在 Unix 上,“文件說明符”默認為 per-process 限製:這限製了使用文件、管道和 fifo 的連接數量。 (macOS(和 Solaris)上的默認限製為 256,但 Linux 上的默認限製為 1024。可以在用於啟動的 shell 中提高該限製R,例如通過ulimit -n.) 文件說明符可用於許多其他目的,包括動態加載 DSO/DLL(請參閱dyn.load)最多可使用限製的 60%。

Windows 默認限製為 512 個打開的 C 文件流:這些流至少由應用於文件的 filegzfilebzfilexzfilepipeurlunz 連接使用(而不是 URL)。

parallelmakeCluster 使用套接字連接與工作進程通信,每個工作進程一個。

注意

R的連接以 S 版本 4 中的連接為模型(參見 Chambers,1998)。然而R遠遠超出了 S 模型,例如在輸出文本連接和 URL、壓縮和套接字連接方麵。默認打開方式為R"r"除了套接字連接。這與 S 不同,S 相當於"r+", 作為。。而被知道"*".

vsnprintf 不返回所需輸出長度的(曆史)平台上,fifogzfilebzfilexzfile 連接上的文本輸出行長度有 100,000 字節的輸出限製:較長的行將被截斷並帶有警告。

例子

zzfil <- tempfile(fileext=".data")
zz <- file(zzfil, "w")  # open an output file connection
cat("TITLE extra line", "2 3 5 7", "", "11 13 17", file = zz, sep = "\n")
cat("One more line\n", file = zz)
close(zz)
readLines(zzfil)
unlink(zzfil)

zzfil <- tempfile(fileext=".gz")
zz <- gzfile(zzfil, "w")  # compressed file
cat("TITLE extra line", "2 3 5 7", "", "11 13 17", file = zz, sep = "\n")
close(zz)
readLines(zz <- gzfile(zzfil))
close(zz)
unlink(zzfil)
zz # an invalid connection

zzfil <- tempfile(fileext=".bz2")
zz <- bzfile(zzfil, "w")  # bzip2-ed file
cat("TITLE extra line", "2 3 5 7", "", "11 13 17", file = zz, sep = "\n")
close(zz)
zz # print() method: invalid connection
print(readLines(zz <- bzfile(zzfil)))
close(zz)
unlink(zzfil)

## An example of a file open for reading and writing
Tpath <- tempfile("test")
Tfile <- file(Tpath, "w+")
c(isOpen(Tfile, "r"), isOpen(Tfile, "w")) # both TRUE
cat("abc\ndef\n", file = Tfile)
readLines(Tfile)
seek(Tfile, 0, rw = "r") # reset to beginning
readLines(Tfile)
cat("ghi\n", file = Tfile)
readLines(Tfile)

Tfile # -> print() :  "valid" connection
close(Tfile)
Tfile # -> print() :  "invalid" connection
unlink(Tpath)

## We can do the same thing with an anonymous file.
Tfile <- file()
cat("abc\ndef\n", file = Tfile)
readLines(Tfile)
close(Tfile)

## Not run: ## fifo example -- may hang even with OS support for fifos
if(capabilities("fifo")) {
  zzfil <- tempfile(fileext="-fifo")
  zz <- fifo(zzfil, "w+")
  writeLines("abc", zz)
  print(readLines(zz))
  close(zz)
  unlink(zzfil)
}
## End(Not run)

## Unix examples of use of pipes

# read listing of current directory
readLines(pipe("ls -1"))

# remove trailing commas.  Suppose

## Not run: % cat data2_
450, 390, 467, 654,  30, 542, 334, 432, 421,
357, 497, 493, 550, 549, 467, 575, 578, 342,
446, 547, 534, 495, 979, 479
## End(Not run)
# Then read this by
scan(pipe("sed -e s/,$// data2_"), sep = ",")


# convert decimal point to comma in output: see also write.table
# both R strings and (probably) the shell need \ doubled
zzfil <- tempfile("outfile")
zz <- pipe(paste("sed s/\\\\./,/ >", zzfil), "w")
cat(format(round(stats::rnorm(48), 4)), fill = 70, file = zz)
close(zz)
file.show(zzfil, delete.file = TRUE)

## Not run: 
## example for a machine running a finger daemon

con <- socketConnection(port = 79, blocking = TRUE)
writeLines(paste0(system("whoami", intern = TRUE), "\r"), con)
gsub(" *$", "", readLines(con))
close(con)

## End(Not run)

## Not run: 
## Two R processes communicating via non-blocking sockets
# R process 1
con1 <- socketConnection(port = 6011, server = TRUE)
writeLines(LETTERS, con1)
close(con1)

# R process 2
con2 <- socketConnection(Sys.info()["nodename"], port = 6011)
# as non-blocking, may need to loop for input
readLines(con2)
while(isIncomplete(con2)) {
   Sys.sleep(1)
   z <- readLines(con2)
   if(length(z)) print(z)
}
close(con2)

## examples of use of encodings
# write a file in UTF-8
cat(x, file = (con <- file("foo", "w", encoding = "UTF-8"))); close(con)
# read a 'Windows Unicode' file
A <- read.table(con <- file("students", encoding = "UCS-2LE")); close(con)

## End(Not run)

參考

Chambers, J. M. (1998) Programming with Data. A Guide to the S Language. Springer.

Ripley, B. D. (2001). “Connections.” R News, 1(1), 16-7. https://www.r-project.org/doc/Rnews/Rnews_2001-1.pdf.

也可以看看

textConnectionseekshowConnectionspushBack

直接使用連接的函數有(文本模式)readLines , writeLines , cat , sink , scan , parse , read.dcf , dput , dump 和 (binary-mode) readBinreadCharwriteBinwriteCharloadsave

capabilities看看是否fifo此版本支持連接R.

gzcongzip 壓縮(解)壓縮圍繞連接。

options HTTPUserAgentinternet.infotimeout 被某些方法用於 URL 連接。

memCompress 了解更多壓縮(解)壓縮方法和數據壓縮參考。

extSoftVersion 表示正在使用的 zlib (適用於 gzfile )、bzip2xz 庫的版本。

要將輸出刷新到 Windows 和 macOS 控製台,請參閱 flush.console

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Functions to Manipulate Connections (Files, URLs, ...)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。