我正在尝试优化我的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函数的主要示例。我仍然无法让它发挥作用。有什么想法吗?
编辑:我已经添加了一个工作示例。答案 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)
从未使用过。