我正在尝试使用fread包中的函数输入一个大的制表符分隔文件(大约2GB)data.table.但是,因为它太大了,所以它并不完全适合内存.我试图通过使用skip和nrow参数来输入它,例如:
chunk.size = 1e6
done = FALSE
chunk = 1
while(!done)
{
temp = fread("myfile.txt",skip=(chunk-1)*chunk.size,nrow=chunk.size-1)
#do something to temp
chunk = chunk + 1
if(nrow(temp)<2) done = TRUE
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我一次读取100万行,对它们进行计算,然后得到下一百万行等.这段代码的问题是在检索fread到每个块后,需要开始扫描文件从一开始就经过每次循环迭代后,skip增加了一百万.结果,在每个块之后,fread实际到达下一个块需要更长和更长时间,这使得效率非常低.
有没有办法告诉你fread暂停每一个说100万行,然后继续阅读从那一点开始而不必重新开始?任何解决方案,还是应该是新功能请求?
如果你有一个缺少值的R data.table,你如何用值0替换所有这些值?例如
aa = data.table(V1=1:10,V2=c(1,2,2,3,3,3,4,4,4,4))
bb = data.table(V1=3:6,X=letters[1:4])
setkey(aa,V1)
setkey(bb,V1)
tt = bb[aa]
V1 X V2
1: 1 NA 1
2: 2 NA 2
3: 3 a 2
4: 4 b 3
5: 5 c 3
6: 6 d 3
7: 7 NA 4
8: 8 NA 4
9: 9 NA 4
10: 10 NA 4
Run Code Online (Sandbox Code Playgroud)
有没有办法在一行中做到这一点?如果它只是一个矩阵,你可以这样做:
tt[is.na(tt)] = 0
Run Code Online (Sandbox Code Playgroud) 这是这样认为的驾驶我疯狂的一个基本问题.在R中生成图形时,它在屏幕上看起来很棒.但是当我尝试使用png(),tiff()等直接将它生成到文件上时,通过将分辨率设置为300,将宽度和高度设置为适合日记纸的合理值,有两个问题:
这真的很烦人,我试过玩点数选项,它有助于使字体更小,但线宽仍然厚实和丑陋.你能否告诉你R中出了什么问题以及如何解决这个问题?我环顾四周,大多数解决方案涉及使用其他图像处理软件.我宁愿弄清楚为什么R在提高分辨率时会这样做以及为什么它会让数字如此难看.这是一个例子:
png(file="test.png",width=5,height=5,units="cm",res=300)
plot(rnorm(1000),rnorm(1000),xlab="some text")
dev.off()
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在尝试获取网站目录中的文件列表.有没有办法类似于本地目录列表的dir()或list.files()命令?我可以使用RCurl连接到网站(我需要它,因为我需要通过HTTPS连接SSL):
library(RCurl)
text=getURL(*some https website*
,ssl.verifypeer = FALSE
,dirlistonly = TRUE)
Run Code Online (Sandbox Code Playgroud)
但这会创建一个HTML文件,其中包含文件列表的图像,超链接等,但我只需要一个R矢量文件,就像你用dir()获得的那样.这可能吗?或者我是否必须进行HTML解析才能提取文件名?听起来像是一个简单问题的复杂方法.
谢谢,
编辑:如果你可以使用http://hgdownload.cse.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeGencodeV7/,那么你会明白我的意思.