R能有多懒?例如,根据下游操作将文件的一部分懒洋洋地读入R 简介:
我试图了解R能有多懒?例如,根据下游操作将文件的一部分懒洋洋地读入R 简介:,r,data.table,dplyr,R,Data.table,Dplyr,我试图了解R的懒惰是否有限制。如中所示,独立于实现的墙是什么。下面我用了一个很有用的例子 设置场景: 我经常有平面文件(1E9到1E11行),比如示例文件file.txt: "chr\tstart\tend\nchr1\t1\t2\nchr1\t2\t3\nchr2\t3\t4\nchr2\t1\t2\nchr3\t2\t3\nchr3\t3\t4\n" i、 e 但对于真实文件,我通常会立即对内容进行采样和/或过滤(有时是为了性能,有时是因为分析只针对观察结果的一部分) 继续使用file.t
R
的懒惰是否有限制。如中所示,独立于实现的墙是什么。下面我用了一个很有用的例子
设置场景:
我经常有平面文件(1E9到1E11行),比如示例文件file.txt
:
"chr\tstart\tend\nchr1\t1\t2\nchr1\t2\t3\nchr2\t3\t4\nchr2\t1\t2\nchr3\t2\t3\nchr3\t3\t4\n"
i、 e
但对于真实文件,我通常会立即对内容进行采样和/或过滤(有时是为了性能,有时是因为分析只针对观察结果的一部分)
继续使用file.txt
我可以用dplyr
的方式:
library(dplyr)
df <- readr::read_tsv("file.txt") %>% sample_n(3)
df2 <- readr::read_tsv("file.txt") %>% filter(chr == "chr2")
df3 <- readr::read_tsv("file.txt") %>% group_by(chr) %>% sample_n(1)
库(dplyr)
df%样本(3)
df2%过滤器(chr==“chr2”)
df3%分组依据(chr)%>%样本(1)
或者等效地使用
数据。表的dt是否可能?是的,我认为是这样(但不是不涉及C级代码)。是否有任何实施?据我所知没有。使用其他工具(例如SQL)很容易,实现也不简单。R
如何知道给定的文本行是否符合下游标准,而不先阅读该行?您是否需要一个过滤器应用程序,该应用程序可能会将一行读取到一个临时对象中,并对其进行测试,并且仅在满足条件时将该对象复制到输出数组中(然后将新行读取到该对象中)?
library(dplyr)
df <- readr::read_tsv("file.txt") %>% sample_n(3)
df2 <- readr::read_tsv("file.txt") %>% filter(chr == "chr2")
df3 <- readr::read_tsv("file.txt") %>% group_by(chr) %>% sample_n(1)