在 R 中生成一些简单的虚拟数据

Posted

技术标签:

【中文标题】在 R 中生成一些简单的虚拟数据【英文标题】:Generate some simple dummy data in R 【发布时间】:2017-02-02 14:58:29 【问题描述】:

我只是想要一些随机数据来试验不同的预测模型。

我的代码:

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循环的最后一行代码触发。

我希望能够解决这个问题。任何帮助表示赞赏。谢谢!

【问题讨论】:

neg 的长度为 5,因为您为其 n 参数提供了 5。因此,您尝试添加长度为 1 的 num 和长度为 5 的 neg @Chrisss 我该如何解决这个问题? &lt;- 是唯一的加法运算符吗? = 提供相同的错误 如果 neg 是 -1 或 1,那么你应该这样做:neg = round(runif(200,0,1)) * 2 - 1 因为你的表达式将返回数字 -1 或 0 @KingDan,&lt;-是赋值运算符,类似于函数assign= 也是一个赋值运算符,但是,它的“权力”更加有限。阅读此***.com/questions/2271575/… 【参考方案1】:

克里斯已经在他的评论中指出了你的问题。但是,从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 必须为您的示例中的每次迭代查找更多内存。

Hadley Wickham 的 Advanced R 是一个很好的资源,要了解更多关于第一个和第二个原因的信息,请阅读 this 和 that

【讨论】:

最后只做 d 感谢您的回答 - 根据您的第二行,NA 在 R 中表示什么? @KingDan NA 表示缺失值。更具体地说,它是一个既不代表TRUE 也不代表FALSE 的逻辑常数。通常使用NA 来预分配内存,因为据推测,当您修改对象时,您将用实际数据替换NA。但是,您可以使用任何东西预分配内存,例如 9999。有关NA 的更多信息,请阅读此r-bloggers.com/r-na-vs-null【参考方案2】:

评论者提到了主要问题,但如果矢量化,您的代码会快得多。此外,您对“否定”的描述与其正在做的事情不一致。您的代码不会生成 -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)

【讨论】:

以上是关于在 R 中生成一些简单的虚拟数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中生成具有累积频率和相对频率的频率表

生成一个虚拟变量

在 R 中生成移动和变量

在 Visual Studio 中生成 ERD 图

如何在 R 中生成 GUID?

R语言使用edit函数在Rsudio中生成数据编辑器(在windows中生成编辑器)在编辑器中输出需要的数据生成最终的dataframe