2016-10-18 5 views
2

난 임의의 수를 더하기 위해 R으로 프로그램을 작성하려고합니다. 그러나 일부 번호로 시도해도 작동하지 않습니다. 예를 들어 , 내가 10 개 임의의 숫자를 요약 할 때난수 합계 R

## rm(list=ls()) 
random.sum <- function(n) { 
x[1:n] <- ceiling(10*runif(n)) 
cat("x:", x[1:n], "\n") 
return(sum(x)) 
} 
x <- rep(100, 10) 
show(random.sum(10)) 
show(random.sum(5)) 

는 나에게 내가 5 다음 하나를하려고 할 때, 그러나

show(random.sum(10)) 

x: 1 3 10 1 3 2 8 6 7 9 

[1] 50 

입니다 정확한 금액을 줄 것이다, 그것을 ,

show(random.sum(5)) 

x: 7 5 6 2 9 
[1] 529 

작동하지 않습니다 내가 잘못

+0

함수 밖에서'x'를 정의하여 10 개의 요소를 가지며, 모두 100으로 설정됩니다. 함수 내부에서'n' 요소를 업데이트합니다. 따라서'n = 5'를 설정하면 처음 5 개 요소 만 업데이트하게됩니다. 나머지 5 개는 여전히 '100'으로 설정되어 있습니다. – SymbolixAU

+2

우리는 왜 이것을하고 싶습니까? – zx8754

답변

3

가장 쉬운 방법은 것 뭐하는 거지 확실하지 않다

sum(sample(1:10, 10, replace = TRUE)) 

최초의 "10"당신의 nminmaxrunif의 값의 범위를 정의 할 수 있습니다 : (@의 Axeman의 의견에 따라 업데이트) 이런 일을합니다.

또한 함수에 지역 x을 유지 :

random.sum <- function(n) { 
    x <- sample(1:10, 10, replace = TRUE) 
    cat("x:", x, "\n") 
    return(sum(x)) 
} 
+0

또는'sum (샘플 (1:10, 10, replace = TRUE))'입니다. – Axeman

+1

@Axeman 사실 훨씬 더 감사합니다. 나는 오리지날 오리지날과 너무 가까워 지려고 노력했다. –

1

하여 오류의 원인은 R.의 변수 범위 지정 규칙 귀하의 전역 범위에서 x가 수정에 복사하지만, 세계의 차원을 유지한다 변수 선언. 첫 번째 n 요소를 sum(x[1:n])과 합하면 올바른 답을 얻을 수 있습니다.

이제 세계적인 객체 x을 함수 내부에서 수정하려고합니까? 그것이 귀하의 의도라면,과 할당 할당 자 <<-을 사용할 수 있습니다. 자세한 내용은 R 소개 섹션 10.5 "함수 내의 할당"을 참조하십시오.