2012-09-03 2 views
0

아래에 코드가 있습니다. 필자가 요구하는 것에 대한 기본 설명은이 코드를 30 번 반복하고 가능한 경우 끝 값을 벡터로 할당하는 것입니다. 시뮬레이션이 실행될 때마다 시드가 하나씩 증가해야합니다. 그래서 복제를 사용하거나 반복 할 생각이었습니다. 그러나 복제본에는 rep(vector, times)이 필요하므로 할당 할 특정 벡터가 없기 때문에 확실하지 않습니다.복제, 반복 또는 기타?

코드를 좀 더 잘 설명하기 위해 A는 B에 알리는 값의 가장 좋은 추측 값입니다. B는 다음 C에 대한 입력으로 사용되며 D. C와 D는 3 개의 값에 대한 수렴까지 반복됩니다.

rep(vector,40){ 
set.seed(100) 

............... 
A 
.............. 
B 
.............. 

for (n in 1:50){ 
............... 
C 
.............. 
D 
.............. 
} 
} 
+1

복제본은 벡터가 아닌 표현식을 사용합니다. 그것이 당신이 원하는 것 같으면 가까이서보세요. –

답변

4

함수의 모든 것을 랩 한 다음 sapply를 사용하여 함수에 인덱스를 공급할 수 있습니다.

yourfun <- function(seed){ 
    set.seed(seed) 
    # your code here 

    ans <- rnorm(1) 
    # just so we can return something 
    return(ans) 
} 

sapply(seq(500, 530), yourfun) 
+0

안녕하세요, 네, 내 코드로 이것을 실행하고 그것이 작동하는 것 같습니다. 한 가지 문제는 코드를 한 번 실행하면 특정 매개 변수에 대해 네 가지 값을 얻을 수 있다는 것입니다. 위의 방법을 사용할 때, 그것은 여전히 ​​완료하지만 난 말도 안되는 30 값을 참조하십시오. 매개 변수를 호출하려고합니다 (예 : 행운이있는 yourfun [ "o1"]). 어떤 아이디어입니까? – user1642166

+0

나는 분명히 내가 반환하고 싶은 것을 할당했다. 왜냐하면 최적화 루틴에서 par, value, count, convergence 및 각각의 30에 대한 메시지 값을 얻었 기 때문이다. 수치 값은 내가 원하는 것이지만 무엇이든 시도하는 것이다. (예 : yourfun [ "$ par"]) 결과는 다음과 같습니다. test1 [ "$ par"]의 유형 : 'closure'유형의 객체는 하위 집합이 아닙니다. – user1642166

+1

yourfun에서 반환되는 내용 만 수정하십시오. 또는 lapply를 사용하여 optim에서 전체 결과를 얻은 다음 lapply를 사용하여 원하는 조각 만 잡을 수 있습니다. – Dason

관련 문제