我理解为什么rep
功能无法通过反复试验解决,为了random.sum(5)
能够解决问题,rep(100, 10)
必须是rep(100, 5)
}。但我不明白为什么:
# clear the workspace
rm(list=ls())
random.sum <- function(n) {
x[1:n] <- ceiling(10*runif(n))
cat("x:", x[1:n] ,"\n")
return(sum(x))
}
set.seed(3585)
x <- rep(100,10)
show(random.sum(10))
x: 9 4 10 1 9 8 4 1 3 2
## [1] 51
show(random.sum(5))
x: 9 6 6 2 2
## [1] 525
答案 0 :(得分:2)
这是因为您没有在函数中创建新变量x
,而是在封闭环境中复制x
并修改它。因此sum(x)
添加了10个元素,其中最后五个元素的值为100
。
要解决此问题,请不要分配给x
切片,将ceiling
的结果分配给任何名称的变量,甚至是x
:
random.sum <- function(n) {
x <- ceiling(10*runif(n))
cat("x:", x[1:n] ,"\n")
return(sum(x))
}
set.seed(3585)
random.sum(10)
## x: 9 4 10 1 9 8 4 1 3 2
## [1] 51
random.sum(5)
## x: 9 6 6 2 2
## [1] 25
请注意差异为500,即全球x
的最终元素。