R data.table 从剪贴板读取
Posted
技术标签:
【中文标题】R data.table 从剪贴板读取【英文标题】:R data.table fread from clipboard 【发布时间】:2013-11-16 03:31:06 【问题描述】:我想创建一个接口 excel-R::data.table。 我想问一下如何在剪贴板中使用 fread 函数。 以下代码运行良好,但我更喜欢使用 fread 而不是 read.table(在 excel 文件中复制一些表并在 R 中运行上述命令):
data.table(read.table("clipboard",sep="\t",header=TRUE))
我尝试声明与剪贴板的连接,但目前无法正常工作。同样如 fread 函数文档中所述,它将发生变化,并且可能会弃用某些东西,因此拥有一个不会在不久的将来弃用的解决方案可能会很好。 剪贴板/fread 有任何限制吗?比如 65000 行,或者其他一些内存限制?
我还想建议扩展 data.table::fread 函数以默认接受“剪贴板”连接,因为它目前适用于 read.table。
谢谢
【问题讨论】:
您可以在此处添加功能请求 - r-forge.r-project.org/projects/datatable 【参考方案1】:fread
似乎没有这个功能,但是对于有限的使用,你可以很容易地为它编写自己的包装器。以下内容可能会帮助您入门:
freadClip <- function(...)
X <- tempfile()
writeLines(readLines("clipboard"), X)
fread(X, ...)
用法只是从 Excel 工作表中复制单元格,切换回 R,然后输入 freadClip()
。
注意: 我假设这更像是一个方便的功能——主要是为了快速将一个小型数据集从 Excel 导入 R。我不知道我是否正如您在问题中描述的那样,将亲自将"clipboard"
用于 65k 行范围内的文件。
【讨论】:
视情况而定。如果你在说OS X
,你有pbpaste
命令和fread
直接接受系统命令作为character
参数。真是太神奇了!例如fread( "pbpaste" )
,在 Linux 上我认为它被称为 xclip
。 Windows 似乎没有内置此功能(显然)。
@SimonO101,我还没有在家里的系统上测试过。我建议的这种方法实际上效率不高,但很快就想到了。
我已经测试了例如fread( "cut -f1 -d, C:/Data/text.txt" )
来读取逗号分隔文本文件的第一列(BenBolker 的解决方案)并且效果很好。【参考方案2】:
fread
绝对是最酷的R
函数,因为您可以直接使用clipboard
或pbpaste
等系统命令。
dt_clip <- function(...)
# returns which operating system being used
os_type <- .Platform$OS.type
# allows the function to be agnostic to the OS.
switch(os_type,
unix = data.table::fread(cmd = 'pbpaste', ...),
windows = data.table::fread(cmd = 'clipboard', ...)
)
这大大加快了速度。
# using a 1e6x2 data table from excel
> system.time( freadClip())
user system elapsed
2.156 0.151 2.509
> system.time( dt_clip())
user system elapsed
0.141 0.060 0.221
【讨论】:
以上是关于R data.table 从剪贴板读取的主要内容,如果未能解决你的问题,请参考以下文章