我正在尝试在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
我不确定我做错了什么
答案 0 :(得分:3)
最简单的方法就是这样(根据@ Axeman的评论更新):
sum(sample(1:10, 10, replace = TRUE))
第一个&#34; 10&#34;是n
和min
以及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;详情。