我知道默认情况下 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.3s、0.6s 和 1.6s
请注意,这是在 i7 笔记本电脑上完成的,N=1000 万的内存为 480mb,内存不是问题。
对于使用 32 位 Windows 的用户,无论您有多少内存,R 都有 1.5gb 的内存限制,但 64 位 Windows 或 64 位 linux 没有这样的限制。与我一个小时的时间成本相比,这些天的内存非常便宜,所以我只是购买更多的内存,而不是花时间试图解决这个问题。但这假设您的模型将适合内存。