2016-07-22 3 views
0

주로 루프의 for 루프를 사용하는 것이 좋지 않다는 이야기를 들었습니다. 효율성을 위해 C를 호출하기 때문에 대신 lapply을 사용해야한다고 들었습니다.루프가있는 R 함수가 피하기 위해 (대신 lapply 사용)

질문 : 그것은 어떻게 lapply 효율적인 코드 (또는 같은 가족에서 다른 applysapply)에 다음과 같은 예를 변환하는 나를 보여줄 수 있을까?

myFun <- function(loop){ 
    result = data.frame() #init new df 
    for(iteration in 1:loop){ 
    generateRnorm1 = matrix(data = rnorm(n = 1000000), nrow = 10000, ncol = 10000) 
    generateRnorm2 = matrix(data = rnorm(n = 1000000), nrow = 10000, ncol = 10000) 
    iterationResult = sum(generateRnorm1, generateRnorm2) 
    bindIterationResult = cbind(iteration, iterationResult) 
    result = rbind(result, bindIterationResult) 
    } 
    return(result) 
} 

test = myFun(loop = 10) 
+1

참조는 [화상 R의 지옥]의 제 4 장 (http://www.burns-stat.com/pages/Tutor/R_inferno.pdf) 내가 –

+0

덕분에 내 질문에 대한 대답 – S12000

답변

3

은 여기 lapply 방법 :

함수의 몸이 실행하는 데 시간이 오래 걸리기 때문에, (있는 경우) 속도 증가 정도가 아니라고
myFun2 <- function(loop){ 
    generateRnorm1 = matrix(data = rnorm(n = 1000000), nrow = 10000, ncol = 10000) 
    generateRnorm2 = matrix(data = rnorm(n = 1000000), nrow = 10000, ncol = 10000) 
    sum(generateRnorm1, generateRnorm2) 
} 

# run function over 1:10 
myList <- lapply(seq.int(10), myFun2) 
# rbind the resulting list 
result2 <- do.call(rbind, myList) 

참고. 이것은 잠재적 인 모든 속도를 lapply으로 늪니다.

내 컴퓨터에서 두 가지 방법 모두 약 20 초가 걸립니다.

+0

감사를 많이 읽을 것 – S12000