我知道默认情况下,SAS可以使用大于内存的模型,但R则不是这样,除非您专门使用biglm或ff等软件包。
但是,如果您正在R中进行可以向量化的数组工作,这将非常快-在某些情况下,速度可能是C程序的一半,但是,如果您正在执行无法向量化的工作,那么看起来慢。举个例子:
# create a data.frame with 4 columns of standard normally distributed RVs
N <- 10000
# test 1
system.time( {df1 <- data.frame(h1=rnorm(N),
h2=rpois(N, lambda=5),
h3=runif(N),
h4=rexp(N))
} )
# about 0.003 seconds elapsed time
# vectorised sum of columns 1 to 4
# i.e. it can work on an entire column all at once
# test 2
system.time( { df1$rowtotal1 <- df1$h1 + df1$h2 + df1$h3 + df1$h4 })
# about 0.001 seconds elapsed time
# test 3
# another version of the vectorised sum
system.time( { df1$rowtotal2 <- rowSums(df1[,c(1:4)]) })
# about 0.001 seconds elapsed time
# test 4
# using a loop... THIS IS *VERY* SLOW AND GENERALLY A BAD IDEA!!! :-)
system.time( {
for(i in 1:nrow(df1)) {
df1$rowtotal3 <- df1[i,1]+ df1[i,2] + df1[i,3] + df1[i,4]
}
} )
# about 9.2 seconds elapsed time
当我将N增加十倍到100,000时,我在20分钟后放弃了测试4,但是测试1:3分别花费了61、3 和37 毫秒
对于N = 10,000,000,测试时间1:3分别为3.3秒,0.6秒和1.6秒
请注意,这是在i7笔记本电脑上完成的,并且N = 1000万的带宽为480mb,内存不是问题。
对于32位Windows上的用户,无论您有多少内存,R的内存限制均为1.5gb,但对于64位Windows或64位linux没有这种限制。这些天的内存与一个小时的时间相比非常便宜,因此我只是购买更多的内存,而不是花时间尝试解决这个问题。但这假设您的模型将适合内存。