......关于执行时间和/或记忆.
如果不是这样,请使用代码段进行证明.请注意,矢量化的加速不计算在内.增速必须来自apply
(tapply
,sapply
,...)本身.
作为最佳实践的问题,我试图确定apply()
在矩阵中创建函数是否更好,或者如果通过函数简单地循环矩阵更好.我尝试了两种方式,并惊讶地发现apply()
速度较慢.任务是取一个向量并将其评估为正数或负数,然后如果为正数则返回1,如果为负则返回-1.该mash()
函数循环和squish()
功能传递给apply()
函数.
million <- as.matrix(rnorm(100000))
mash <- function(x){
for(i in 1:NROW(x))
if(x[i] > 0) {
x[i] <- 1
} else {
x[i] <- -1
}
return(x)
}
squish <- function(x){
if(x >0) {
return(1)
} else {
return(-1)
}
}
ptm <- proc.time()
loop_million <- mash(million)
proc.time() - ptm
ptm <- proc.time()
apply_million <- apply(million,1, squish)
proc.time() - ptm
Run Code Online (Sandbox Code Playgroud)
loop_million
结果:
user system elapsed
0.468 0.008 0.483
Run Code Online (Sandbox Code Playgroud)
apply_million
结果:
user system …
Run Code Online (Sandbox Code Playgroud) 早上好,
我在R中开发了几个月,我必须确保代码的执行时间不会太长,因为我分析了大数据集.
因此,我一直在尝试使用尽可能多的矢量化函数.
但是,我仍然想知道一些事情.
R中代价高昂的不是循环本身吗?我的意思是,当您开始在循环中修改变量时出现问题,例如是否正确?
因此我在思考,如果你只需要在每个元素上运行一个函数(你实际上并不关心结果)会怎么样.例如,在数据库中写入数据.你该怎么办?
1)使用mapply而不将结果存储在任何地方?
2)在向量上做一个循环,只对每个元素应用f(i)?
3)我可能错过了更好的功能吗?
(当然假设你的功能没有最佳矢量化).
foreach
包裹怎么样?您是否通过使用它获得了任何性能提升?
实验涉及滚动一个公平的模具并获得x说,然后抛出一个公平的硬币x次并记录尾巴的数量.我需要做50次这个实验并将结果记录在矢量中(我将用它绘制直方图.)
到目前为止这是我的代码:
for (i in 1:100)
{X <- sample(6,1,replace=TRUE,c(1,1,1,1,1,1)/6)
Y <- sample(2,1,replace=TRUE,c(1,1)/2)}
Youtcomes <- c(sum(Y))
Youtcomes
Run Code Online (Sandbox Code Playgroud)
但是我没有给我一个包含100个元素的向量,而是只获得一个数字.我哪里错了?
注意:我必须使用for循环.