2014-10-30 111 views
0

我想优化我的R代码,我已经开始替换使用函数等实现“快速和肮脏”的循环。现在我已经到了一种情况,我相信应用功能会很方便。尽管如此,我无法将头围住。用apply()替换for-loop?

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函数的主要例子。但我仍然无法实现它的工作。有任何想法吗?

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

+0

您的预期成果是什么? – 2014-10-30 17:15:55

+3

你是'rbind'函数。这段代码没有意义。 – flodel 2014-10-30 17:17:45

+0

你可以发布'my.frame'的一些数据,以便我们更好地了解你正在做什么? – Stedy 2014-10-30 17:22:29

回答

1

此代码覆盖自身。而不是保存循环中的每个运行。你正在通过myframe中的数据重写每一个循环的新帧。基本上,你的循环做的唯一的事情是我跑的最后一个值,它是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) 

是从来没有使用。

+0

对不起,示例代码是错误的。它应该是'rbind(result,newframe)'。我改变了这个例子... – user3347232 2014-10-30 19:17:08