R中随机数的总和

时间:2016-10-18 04:37:56

标签: r

我正在尝试在R中编写一个程序来求和n随机数。但是,当我尝试一些数字时,它不会起作用。 例如,

## 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))

当我尝试总计10个随机数时,它会给我正确的总和

show(random.sum(10)) 

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

[1] 50

然而,当我尝试下一个为5的时候,它不会工作,

show(random.sum(5))

x: 7 5 6 2 9 
[1] 529

我不确定我做错了什么

2 个答案:

答案 0 :(得分:3)

最简单的方法就是这样(根据@ Axeman的评论更新):

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

第一个&#34; 10&#34;是nmin以及max定义runif的值范围。

同时保持x本地功能:

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

答案 1 :(得分:1)

错误的原因是R的变量范围规则。全局范围中的变量x在修改时被复制,但保留全局声明的维度。如果仅将n个元素与sum(x[1:n])相加,您将获得正确的答案。

现在,这引出了一个问题,您是否正在尝试修改函数内的全局对象x?如果这是您的意图,可以使用超级对齐运算符<<-。请参阅R简介10.5和#34;功能中的分配&#34;详情。