【发布时间】:2015-08-18 17:00:03
【问题描述】:
我有一个data.frame,我想按一个序列为每个列表生成随机数。
我使用sample 函数创建随机数,但即使我为列表[[1]] 创建了随机数,用于设置[[2]] 再次产生相同的数字。那么,在这里我如何为集合[[2]] 创建不同的随机数。
这里是简单的代码;
data.list <- lapply(1:2, function(x) {
nrep <- 1
time <- rep(seq(90,54000,by=90),times=nrep)
Mx <- rep(sort(sample(seq(0.012,-0.014,length.out = 600),replace=TRUE)), times=nrep)
My <- rep(sort(sample(seq(0.02,-0.02,length.out = 600),replace=TRUE)), times=nrep)
Mz <- rep(sort(sample(seq(-1,1,length.out=600),replace=TRUE)), times=nrep)
data.frame(time,Mx,My,Mz,set_nbr=x)
})
这是提供每个数据集的前 5 行
[[1]]
time Mx My Mz set_nbr
1 90 -1.391319e-02 -2.000000e-02 -1.000000000 1
2 180 -1.386978e-02 -1.986644e-02 -1.000000000 1
3 270 -1.386978e-02 -1.973289e-02 -0.996661102 1
4 360 -1.382638e-02 -1.973289e-02 -0.993322204 1
5 450 -1.382638e-02 -1.973289e-02 -0.979966611 1
.. .. .... .... .... ...
[[2]]
time Mx My Mz set_nbr
1 90 -1.395659e-02 -0.0200000000 -1.000000000 2
2 180 -1.391319e-02 -0.0199332220 -0.993322204 2
3 270 -1.386978e-02 -0.0199332220 -0.993322204 2
4 360 -1.386978e-02 -0.0199332220 -0.993322204 2
5 450 -1.382638e-02 -0.0199332220 -0.986644407 2
.. .. .... .... .... ...
编辑 1:
关于@bgoldst 的回答,我现在可以产生不同的数字
set.seed(1);
data.list <- lapply(1:2, function(x) {
nrep <- 1;
time <- rep(seq(90,54000,by=90),times=nrep);
Mx <- rep(sort(runif(600,-0.014,0.012)),times=nrep);
My <- rep(sort(runif(600,-0.02,0.02)),times=nrep);
Mz <- rep(sort(runif(600,-1,1)),times=nrep);
data.frame(time,Mx,My,Mz,set_nbr=x);
});
另一方面,当我更改 nrep <- 3; 时,会为每个 nrep 创建相同的数字。这是我想从一开始就避免的事情。
编辑 2:
@bgoldst 表明 replicate 完成了这项工作!
【问题讨论】:
-
您不需要指定要
sample选择多少个号码吗?我认为您只是在此处保留整个seq向量。 -
@Vincent 也许这也可以。但我不知道如何设置:(
-
我仔细查看了您的代码,每个数据集中产生的数字都不同...您能提供每个数据集的前 5 行吗?
-
可以看到有些数字又被复制了。这不是我想要的。我想为
Mx、My和Mz提供完全不同的数字(非常小的差异是可以的)。