R函数中的rep函数

时间:2014-10-05 01:06:57

标签: r

我理解为什么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

1 个答案:

答案 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的最终元素。