当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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