다음과 같이 for 루프를 중첩했습니다. 나는 p : q = 1 : 300, n = 20이 필요하다. 기능 "마크"는 내 관심 모델입니다 (패키지 RMark). 나는 rbind가 느릴 수 있지만 그것을 대체하기 위해 무엇을 사용해야하는지 전혀 모른다는 것을 알고 있습니다. 그렇지 않은 경우이 기능을 더 빠르게 수행하려면 무엇을 할 수 있습니까? 감사.R에서 중첩 된 for 루프를 용이하게하는 방법은 무엇입니까?
foo<-function(data, p, q, n){
results.frame <- data.frame()
for (i in 1:n){
for (i in p:q) {
run.model<-mark(data[sample(nrow(data), i),], model="Occupancy")
results<-data.frame(summary(run.model)$real$p, Occupancy=summary(run.model)$real$Psi, se.p=t(as.matrix(summary(run.model, se=T)$real$p$se)), se.Psi=summary(run.model, se=T)$real$Psi$se, stations=i)
results.frame<-rbind(results.frame, results)
}
}
write.table(results.frame, "C:\\RWorkspace\\simulation_results.txt")
return(results.frame)
}
1) 당신은 results.frame''의 크기를 미리 할당하고 인덱싱하여 기입해야한다. 2)'data.frame()'이 정말로 필요한가 아니면'matrix()'만으로 충분할 것인가? 결과는 모두 숫자처럼 보이므로 행렬만으로 충분할 수 있습니다. 3)'cmpfun()'함수가'compiler' 패키지를 통해 여러분에게 어떤 자유 속도 충돌을 주는지 확인합니다. 4) 'mark()'함수가 base에없고, 당신의 질문이 [reproducible]이 아니므로 어디에서 오는 지 알려주세요. (http://stackoverflow.com/questions/5963269/how-to-make-a-great- r-reproducible-example). 사람들은 실제 조언을하기가 어려울 것입니다. – Chase
1) 합리적인 것 같아서, 나는 그것을 시도 할 것이다. 2) 예, 모든 출력은 숫자이므로 matrix()로 전환합니다. 3)'cmpfun()'과'complier'를 살펴 보겠습니다. 4)'mark()'함수는 "RMark"패키지에서 가져옵니다. 이것은 동물 집단 역학을위한 것입니다. 제안 해 주셔서 감사합니다. – lamushidi
또한 두 루프 모두에서 'i'를 사용하고 있습니다. 다른 변수를 사용하는 것이 더 좋으므로 루프 내부에서 원하는 'i'를 사용하고 있음을 확신 할 수 있습니다. – Aaron