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, ...)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。