构建用于随机采样的R循环

问题描述 投票:2回答:2

我正在从包含许多值列表的文件中采样,例如:

312313.34
243444
12334.92
321312
353532

并使用R从此列表中随机采样:

list = read.table("data")
out <-sample(list,50,replace=TRUE)
out.mean<-mean(out)
out.mean

有人可以告诉我如何将其放入循环中,以便我可以执行此过程1000次,并取其平均值将产生1000次。

非常感谢!

Rubal

r loops text sample
2个回答
7
投票

一种替代解决方案是(请记住@Tyler Rinker刚才对replicate所说的话]

Data <- read.table(text='
312313.34
243444
12334.92
321312
353532', header=FALSE)

Data <- as.numeric(as.matrix((Data))) 

set.seed(007)
Means <- replicate(1000, mean(sample(Data,50,replace=TRUE))) 

均值由大小为50的每个子样本中的1000个均值组成。如果您想要均值,请执行以下操作:

mean(Means) 

[您正在尝试做的事情听起来像是自举,或者类似于重新采样技术以减少偏差(我想)。


5
投票

我将从采样中提取一个函数,然后用lapply一遍又一遍地重复(尽管replicate也可能会起作用,但我有过这样的经历,它的运行速度要慢得多]

我建议不要写入名为list的对象,因为这是一项重要功能。

所以它看起来像这样:

#make a data set that may look like yours
LIST <- rnorm(1000)

#take your code and make a function   
mean.find <- function(dat) {
    out <-sample(dat, 50,replace=TRUE)
    mean(out)
}

#a single use yo check it out 
mean.find(LIST)

#repeat it 1000 times with lapply
reps <- unlist(lapply(seq_len(1000), mean.find))

#take the mean of that
mean(reps)

0
投票

您可以使用双变量数据吗?就像我想从数据框中随机抽取100行中的10行,比如说说1000次,然后计算每个样本的平均值?

© www.soinside.com 2019 - 2024. All rights reserved.