用apply()替换for循环?

时间:2014-10-30 17:09:15

标签: r loops apply

我正在尝试优化我的R代码,并且我已经开始用函数等替换已经实现“快速和脏”的循环。我现在已经到了这样一种情况,我相信apply-function会很方便。但我无法绕过它。

a <- c(10,20,15,43,76,41,25,46)
c <- c(2,5,8,3,6,1,5,6)                               
myframe <- data.frame(a,c)
newframe <-vector(length=3)
constant <- data.frame(a,c,a,a,a,a,a,a,a,a,a,a,c)

a.function <- function(frame){
  newframe <- frame*22
  return(newframe)}

result <-  matrix(nrow=nrow(myframe),ncol=3)

for(i in 1:nrow(myframe)){
  newframe <- a.function(myframe[i,])
  newframe[ncol(myframe)+1] = i 
  newframe[ncol(myframe)+2] = constant[i,9]
  #more columns added
  newframe <- rbind(result,newframe)
}

我试图尽可能地减少循环,我希望它仍然可以被理解。 遍历数据帧的行应该是使用for函数的主要示例。我仍然无法让它发挥作用。有什么想法吗?

编辑:我已经添加了一个工作示例。

1 个答案:

答案 0 :(得分:1)

此代码会覆盖自己。而不是保存每个循环的运行。您使用来自myframe的数据每次循环重写新帧。基本上你的循环所做的唯一事情就是运行i的最后一个值,即nrow(myframe)

newframe <- a.function(myframe[nrow(myframe),])
newframe[ncol(myframe)+1] = nrow(myframe)
newframe <- rbind(newframe,newframe)

result <-  matrix(nrow=nrow(myframe),ncol=3)

从未使用过。