Substituir rbind no loop for por lapply? (2º círculo do inferno)
Estou tendo problemas para otimizar um pedaço de código R. O código de exemplo a seguir deve ilustrar meu problema de otimização:
Algumas inicializações e uma definição de função:
a <- c(10,20,30,40,50,60,70,80)
b <- c(“a”,”b”,”c”,”d”,”z”,”g”,”h”,”r”)
c <- c(1,2,3,4,5,6,7,8)
myframe <- data.frame(a,b,c)
values <- vector(length=columns)
solution <- matrix(nrow=nrow(myframe),ncol=columns+3)
myfunction <- function(frame,columns){
athing = 0
if(columns == 5){
athing = 100
}
else{
athing = 1000
}
value[colums+1] = athing
return(value)}
O problemático for-loop se parece com isso:
columns = 6
for(i in 1:nrow(myframe){
values <- myfunction(as.matrix(myframe[i,]), columns)
values[columns+2] = i
values[columns+3] = myframe[i,3]
#more columns added with simple operations (i.e. sum)
solution <- rbind(solution,values)
#solution is a large matrix from outside the for-loop
}
O problema parece ser orbind
função. Frequentemente recebo mensagens de erro sobre o tamanho desolution
que parece ser muito grande depois de um tempo (mais de 50 MB). Eu quero substituir esse loop e orbind
com uma lista elapply
e / ou foreach. Eu comecei com a conversãomyframe
para uma lista.
myframe_list <- lapply(seq_len(nrow(myframe)), function(i) myframe[i,])
Eu realmente não cheguei além disso, embora tenha tentado aplicar issomuito boa introdução ao processamento paralelo.
Como preciso reconstruir o loop for sem precisar alterarmyfunction
? Obviamente, estou aberto a diferentes soluções ...
Edit: Este problema parece ser direto doSegundo círculo do inferno do Inferno R. Alguma sugestão?