我只想要一些随机数据来试验不同的预测模型。
我的代码:
x <- 0
for (i in 1:200)
{
num <- runif(1, 0, 500)
neg <- round(runif(5, -1, 0))
percent <- ((0.01 * runif(1, 1, 10)) * num)
x[i] = num + (neg * percent)
}
这个想法是这应该产生200分。
num
是0到500之间的随机数
neg
为-1或1,只是为随机偏移(随机生成的点的负偏移或正偏移)添加一些灵活性
percent
只是最初生成的随机数的1%到10%之间的随机百分比,可以加上或减去
我用我的主要语言C#编写的代码非常相似,效果非常好并生成了正确的图表。我或多或少试图移植该代码。
每当我运行上述操作时,我都会收到以下错误(很多错误):
number of items to replace is not a multiple of replacement length
它在for循环的最后一行代码中触发。
我希望能够解决这个问题。任何帮助表示赞赏。谢谢!
答案 0 :(得分:4)
克里斯已经在评论中指出了你的问题。但是,您从R
编程预期中做了很多不好的事情。以下方法更好:
N <- 200
d <- data.frame(x = rep(NA, N))
num <- runif(N, 0, 500)
neg <- sample(c(1,-1), 200, replace = TRUE) #jrdnmdhl pointed this out in his post
percent <- ((0.01 * runif(N, 1, 10)) * num)
d$x <- num + (neg * percent)
为什么这样更好?有两个原因,我们避免使用for循环。 R
是一种高级语言,因此循环很慢。其次,你没有预先分配你的记忆。跳过此步骤也会减慢速度。 R
必须为示例中的每次迭代找到更多内存。
答案 1 :(得分:2)
评论者提到了主要问题,但如果矢量化,你的代码会快得多。另外,你对'neg'的描述与它正在做的事情不一致。您的代码不会生成-1或1.而是生成-1或0.下面的代码将为neg变量生成-1或1。
num = runif(200, 0, 500)
neg = sample(c(1,-1),200,replace=T)
percent = ((0.01 * runif(200, 1, 10)) * num)
x = num + (neg * percent)