【问题标题】:Simulating and assigning multiple vectors in R在 R 中模拟和分配多个向量
【发布时间】:2015-04-26 19:43:48
【问题描述】:

我正在尝试运行一些数据来比较 Tukey 的方法和 Bonferroni 的方法,但不想模拟数据然后将其单独分配给向量。

我目前正在这样做,但是太费时了。

v1 = c(rnorm(100, mean = 0, sd = 1))
v2 = c(rnorm(100, mean = 0, sd = 1))
v3 = c(rnorm(100, mean = 0, sd = 1)) 

我现在正在尝试复制,但无法使这些功能可用。
我该怎么办?

> I = 3 #number of populations
> J = 10 #number of samples per
> replicate(I,data.frame(c(rnorm(J, mean = 0, sd = 1))))
$c.rnorm.J..mean...0..sd...1..
 [1]  0.47157860  0.36176156 -0.58902072 -0.14258664  0.35517119 -0.46813092 -0.03242732  0.68066082
 [9] -0.19652503  0.57674030

$c.rnorm.J..mean...0..sd...1..
 [1] -0.9107527 -0.1498868  1.7936493  0.2083297 -0.2178705 -0.8321252 -1.0367427  1.1417998 -0.7209510
[10] -0.1906778

$c.rnorm.J..mean...0..sd...1..
 [1] -1.6571571 -0.3131047  1.3253667  0.1691123  1.7925107  0.5994749  0.5405659  1.1630389  3.1745593
[10]  0.8812708

提前致谢。

【问题讨论】:

  • 为什么在上面的代码sn-ps中调用c函数呢?它没有任何目的。
  • 您需要一个列表作为回报还是data.frame。无论哪种方式,我都建议将它们全部保存在一个对象中。
  • @Konrad 我是 R 的新手,来自实验室课程,他们说任何列表都应该包含“c”来定义向量
  • @3_Kel 这通常只在c将不同元素组合到一个向量中时才需要。单个元素本身就是一个向量(长度为 1),不需要c。您可以对此进行测试:在 R 中输入 identical(c(1), 1) 将产生 TRUE

标签: r vector rstudio


【解决方案1】:

类似于 Jaehyeon Kim 上面的建议:

> vs <- lapply(1:3, function(x) rnorm(100,0,1))
> str(vs)

...生成长度为 100 的数值向量列表:

List of 3
 $ : num [1:100] 0.367 1.549 0.453 -0.374 -0.105 ...
 $ : num [1:100] 0.254 -0.333 -1.732 -0.213 2.001 ...
 $ : num [1:100] -0.07771 -0.00472 -0.89804 -0.90337 -0.73967 ...

当您说“太耗时”时,您是指打字还是跑步?这对我来说运行得非常快。

【讨论】:

  • 教授觉得看的太费时间了。顺便谢谢你!
【解决方案2】:

下面是我的试用版。在你的情况下,它应该是rep(100, 3)

set.seed(1237)
lapply(rep(10, 3), rnorm, mean = 0, sd = 1)
[[1]]
[1] -0.4448532 -1.9732164 -0.8559826  1.7137530  0.9392717 -1.1769761 -0.9256115
[8]  0.0336911  0.8581240 -0.3075549

[[2]]
[1] -0.02058666  1.81681629 -1.13020054  1.00108987  1.06564415  2.44900776
[7]  0.07325534 -0.60973790 -0.28549277 -1.27718700

[[3]]
[1]  0.71017604  0.14531931 -0.09999525 -1.05494900  0.34294721  0.17487679
[7]  0.02907445 -1.60803324  1.61825097  0.38081074

【讨论】:

  • 循环中不需要。一个单一的rnorm 电话就足够了。例如split(rnorm(30), ceiling(seq(30) / 10))
猜你喜欢
  • 2014-10-08
  • 2014-05-20
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多