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 |
字符串,部分匹配 |
headers |
在 HTTP 請求中使用的 HTTP 標頭的命名字符向量。對於非 HTTP URL,它會被忽略。來自 |
compression |
0-9 之間的整數。寫入時要應用的壓縮量,從無到最大可用。對於 |
timeout |
數字:用於此連接的超時(以秒為單位)。請注意,某些操作係統可能會將非常大的值視為零:但是 POSIX 標準要求支持長達 31 天的值。 |
options |
帶有選項的可選字符向量。目前 TCP 套接字僅支持 |
filename |
zip 文件中的文件名。 |
host |
字符串。端口的主機名。 |
port |
整數。 TCP 端口號。 |
server |
合乎邏輯的。套接字應該是客戶端還是服務器? |
socket |
監聽連接的服務器套接字。 |
con |
一個連接。 |
type |
字符串。目前被忽略。 |
rw |
字符串。空或 |
... |
傳遞給其他方法或從其他方法傳遞的參數。 |
細節
前十一個函數創建連接。默認情況下,連接不會打開(除了 socketConnection
或 socketAccept
創建的套接字連接以及 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
壓縮的文件的路徑:它還可以打開以讀取未壓縮的文件以及由 bzip2
、 xz
或 lzma
壓縮的文件。
對於 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 上都可用。)
其意圖是file
和gzfile
通常可用於文本輸入(來自文件,‘http://' 和 'https://’ URL)和二進製輸入。
open
、close
和 seek
是通用函數:以下內容適用於與連接相關的方法。
open
打開連接。一般來說,使用連接的函數會在連接未打開時將其打開,然後再次關閉它們,因此要使連接保持打開狀態,請顯式調用open
。
close
關閉並銷毀連接。如果不再存在,這將在適當的時候自動發生(帶有警告)R引用連接的對象。
flush
刷新為寫入/追加而打開的連接的輸出流(當前已實現,用於文件和剪貼板連接, stdout
和 stderr
)。
如果對於 file
或(在大多數平台上)fifo
連接,說明為 ""
,則立即打開文件/fifo(在 "w+"
模式下,除非指定 open = "w+b"
)並從文件係統取消鏈接。這提供了一個臨時文件/fifo 來寫入然後讀取。
socketConnection(server=TRUE)
創建一個新的臨時服務器套接字,偵聽給定端口。一旦該端口上接受了新的套接字連接,服務器套接字就會自動關閉。 serverSocket
創建一個監聽服務器套接字,可用於通過 socketAccept
接受多個套接字連接。要停止偵聽新連接,需要通過 close
顯式關閉服務器套接字。
socketConnection
和socketAccept
支持socket-specific選項的設置。目前僅實現了 "no-delay"
,它啟用了 TCP_NODELAY
套接字選項,導致套接字立即刷新發送緩衝區(而不是在發送之前等待收集所有輸出)。此選項對於需要快速請求/響應 turn-around 次的協議很有用。
socketTimeout
設置套接字連接的連接超時時間。可以給出負值timeout
來查詢舊值。
值
file
, pipe
, fifo
, url
, gzfile
, bzfile
, xzfile
, unz
, socketConnection
, socketAccept
和serverSocket
返回一個連接對象,該對象繼承自類"connection"
,並具有第一個更具體的類。
open
和 flush
無形地返回 NULL
。
close
以不可見方式返回 NULL
或整數狀態。該狀態來自上次關閉連接時的狀態,並且僅適用於某些類型的連接(例如管道、文件和 fifo):通常為零值表示成功。負值將導致警告;如果寫入,這些可能表明寫入失敗,不應忽略。
isOpen
返回一個邏輯值,表示連接當前是否打開。
isIncomplete
返回一個邏輯值,無論來自非阻塞連接的最後一次讀取嘗試是否未提供數據(當前沒有來自套接字或 readLines
中未終止的行的數據),或者對於輸出文本連接是否有未刷新的輸出。請參閱下麵的示例。
socketTimeout
返回套接字連接的舊超時值。
網址
url
和file
支持 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
,scan
和source
適用於任何形式的行結束)。各種各樣的R操作隻能在其中一種模式下進行:例如pushBack
是text-oriented,並且僅允許在打開的連接上以文本模式讀取,以及二進製操作,例如readBin
,load
和save
隻能在 binary-mode 連接上完成。
連接的模式在實際打開時確定,如果給出open = ""
(除了套接字連接之外的所有連接的默認值),則會推遲連接的模式。對 open
的顯式調用可以指定模式,否則模式將為 "r"
。 ( gzfile
、 bzfile
和 xzfile
連接是例外,因為壓縮文件始終必須以二進製模式打開,並且即使在 Windows 上也不會完成 line-endings 的轉換,因此默認模式被解釋為 "rb"
.) 大多數需要寫訪問或text-only 或binary-only 模式的操作將覆蓋尚未打開的連接的默認模式。
對於 compressed-file 連接,需要仔細考慮追加模式。他們是這樣不是在文件上生成單個壓縮流,而是將新的壓縮流附加到文件中。讀者可能會也可能不會閱讀超出第一個流末尾的內容:當前R這樣做是為了gzfile
,bzfile
和xzfile
連接。
壓縮
R支持gzip
,bzip2
和xz
壓縮(也是對其前體的隻讀支持,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
,bzip2
和xz
逐漸受到越來越少的支持,需要更多的資源來壓縮和解壓縮,並實現更多的壓縮(盡管個別文件可能會違背總體趨勢)。典型的經驗是bzip2
文本文件的壓縮效果比gzip
壓縮,以及xz
最大壓縮比提高 30%。經驗與R save
文件類似,但在一些大的‘.rda’ 文件xz
壓縮比其他兩個好很多。即使使用當前的計算機減壓時間compress = 9
通常情況下,讀取壓縮文件通常比未壓縮文件更快,因為磁盤活動減少了。
編碼
連接的輸入/輸出流的編碼可以通過名稱指定,其方式與 iconv
相同:請參閱幫助頁麵,了解如何找出您的平台上識別的編碼名稱。此外,""
和 "native.enc"
都表示 ‘native’ 編碼,即當前語言環境的內部編碼,因此不會進行任何轉換。
當寫入文本連接時,連接代碼始終假設其輸入采用本機編碼,因此例如writeLines
必須將文本轉換為本機編碼。大多數係統上的本機編碼是 UTF-8(自 R 4.2 起,最近的 Windows 上也如此),並且可以表示所有字符。 writeLines
在 useBytes=TRUE
時不會進行轉換(僅供專家使用,僅在使用除 UTF-8 之外的本機編碼的係統上有用),但連接代碼的行為仍然如同文本采用本機編碼一樣,因此任何嘗試在連接中轉換編碼( encoding
參數而不是 ""
和 "native.enc"
)將產生不正確的結果。
從文本連接讀取時,連接代碼將輸入重新編碼為本機編碼(根據 encoding
參數給出的編碼)。在 UTF-8 不是本機編碼的係統上,可以使用 readLines
和 scan
讀取本機編碼中無法表示的文本,方法是向它們提供一個未打開的連接,該連接是使用指定輸入的 encoding
參數創建的編碼。然後 readLines
和 scan
將指示連接代碼將文本轉換為 UTF-8 (而不是本機編碼),並且它們將返回標記(也稱為聲明,請參閱 Encoding
)為 "UTF-8"
。最後,僅供專家使用,可以通過將連接的 ""
或 "native.enc"
指定為 encoding
來禁用輸入重新編碼。但然後通過 readLines
和 scan
的 encoding
參數將文本標記為 "UTF-8"
或 "latin1"
。
重新編碼僅適用於文本模式下的連接:從在二進製模式下指定的重新編碼的連接中讀取將讀取字節流,但混合文本和二進製模式讀取(例如,混合調用 readLines
和 readChar
)可能會導致錯誤的結果。
編碼 "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 上的 file
和 pipe
是例外,其中標記為 UTF-8 的 description
將作為 ‘wide’ 字符串傳遞到 Windows。這允許在使用 Unicode 文件名的文件係統(例如 NTFS 但不是 FAT32)上打開名稱不是本機編碼的文件。
'ftp://’ 網址
大多數現代瀏覽器不支持此類 URL,並且‘https://' 更適合用於R.
其目的是R將繼續允許此類 URLlibcurl
確實如此,但隨著它們變得越來越少,這種情況也越來越未經測試。 ‘protocols’是什麽版本libcurl
正在使用的支持可以通過調用查看libcurlVersion()
.
連接數
任何一次可以分配(不一定是打開)的連接數量是有限製的。完成後關閉連接是一個很好的做法,但如果有必要,garbage-collection 將被調用來關閉這些連接,而不需要任何連接。R引用它們的對象。
默認限製為128(包括三個終端連接,stdin
,stdout
和stderr
)。當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 文件流:這些流至少由應用於文件的 file
、 gzfile
、 bzfile
、 xzfile
、 pipe
、 url
和 unz
連接使用(而不是 URL)。
包 parallel
的 makeCluster
使用套接字連接與工作進程通信,每個工作進程一個。
注意
R的連接以 S 版本 4 中的連接為模型(參見 Chambers,1998)。然而R遠遠超出了 S 模型,例如在輸出文本連接和 URL、壓縮和套接字連接方麵。默認打開方式為R是"r"
除了套接字連接。這與 S 不同,S 相當於"r+"
, 作為。。而被知道"*"
.
在 vsnprintf
不返回所需輸出長度的(曆史)平台上,fifo
、 gzfile
、 bzfile
和 xzfile
連接上的文本輸出行長度有 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.
也可以看看
textConnection
、seek
、showConnections
、pushBack
。
直接使用連接的函數有(文本模式)readLines
, writeLines
, cat
, sink
, scan
, parse
, read.dcf
, dput
, dump
和 (binary-mode) readBin
、 readChar
、 writeBin
、 writeChar
、 load
和 save
。
capabilities
看看是否fifo
此版本支持連接R.
gzcon
將 gzip
壓縮(解)壓縮圍繞連接。
options
HTTPUserAgent
、 internet.info
和 timeout
被某些方法用於 URL 連接。
memCompress
了解更多壓縮(解)壓縮方法和數據壓縮參考。
extSoftVersion
表示正在使用的 zlib
(適用於 gzfile
)、bzip2
和 xz
庫的版本。
要將輸出刷新到 Windows 和 macOS 控製台,請參閱 flush.console
。
相關用法
- R conditions 狀況處理和恢複
- R conflicts 在搜索路徑上搜索被遮罩的對象
- R col 列索引
- R comment 查詢或設置“評論”屬性
- R complex 複數和基本函數
- R colSums 形成行和列的總和及平均值
- R commandArgs 提取命令行參數
- R colnames 行和列名稱
- R chartr 字符翻譯和裝箱
- R chol2inv Cholesky(或 QR)分解的逆分解
- R cumsum 累積和、乘積和極值
- R character 字符向量
- R c 將值組合到向量或列表中
- R cut 將數字轉換為因子
- R class 對象類
- R chooseOpsMethod 選擇適當的操作方法
- R chol 喬列斯基分解
- R cbind 按行或列組合 R 對象
- R crossprod 矩陣叉積
- R curlGetHeaders 從 URL 中檢索標頭
- R cat 連接並打印
- R capabilities 此 R 版本的報告函數
- R callCC 調用當前延續
- R call 函數調用
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Functions to Manipulate Connections (Files, URLs, ...)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。