-2

感谢您阅读此主题。我对 R 比较陌生,所以这个问题可能看起来很愚蠢。

所以,我有一个关于产品价格的数据集。它是一个 240 x 1,000 的矩阵。每列代表一个独特的产品,每一行提供特定月份 1,000 的价格信息。我正在尝试重新采样数据集并获得相同维度的新矩阵。

  • 我的数据保存为“数据”

  • 我想将引导结果保存在“newdata”中,这是一个空的 240x1,000 矩阵

这是我的代码:

for (month in 1:num.months)
{  
  for (n in 1:num.products)
  {
    newdata[month, n] <- mean(sample(data[month, ], 
                                size = num.productss,
                     replace = TRUE));
  }
 }

这行得通,但 For 循环使事情变得非常缓慢。如果有人能指出我如何通过使用 apply、sapply、tapply 等来提高速度,那就太好了。谢谢。

4

1 回答 1

0

我建议您在创建自己的采样方法之前尝试查看 R 中已有的引导函数和包。

但是,这将给出一个列表,每个元素都是从原始元素中采样的矩阵。时间包括:

> m = matrix(rnorm(24000),nrow=1000,ncol=24)
> nbootstrap = 100
> 
> system.time((mboot = lapply(1:nbootstrap, function(i)
+   {
+    m[sample(1:nrow(m),replace=T),]
+ })))
   user  system elapsed 
   0.27    0.00    0.26 

> m = matrix(rnorm(24000),nrow=1000,ncol=24)
> nbootstrap = 1000
> 
> system.time((mboot = lapply(1:nbootstrap, function(i)
+   {
+    m[sample(1:nrow(m),replace=T),]
+ })))
   user  system elapsed 
   1.45    0.03    1.59 

> m = matrix(rnorm(240000),nrow=1000,ncol=240)
> nbootstrap = 100
> 
> system.time((mboot = lapply(1:nbootstrap, function(i)
+   {
+    m[sample(1:nrow(m),replace=T),]
+ })))
   user  system elapsed 
   0.97    0.05    1.02 

> m = matrix(rnorm(240000),nrow=1000,ncol=240)
> nbootstrap = 1000
> 
> system.time((mboot = lapply(1:nbootstrap, function(i)
+   {
+    m[sample(1:nrow(m),replace=T),]
+ })))
   user  system elapsed 
   6.60    1.20    7.97 
于 2012-07-05T23:46:21.647 回答