Вообще неявные циклы быстрее явных циклов.Попробуйте взять код внутри вашего цикла и поместить его в функцию, а затем использовать эту функцию в выражении lapply или sapply.
myfunction = function(<insert relevant parameters here>)
{
X.sample <- X[ sample(1:nrow(X), 40, replace = FALSE), ]
X.sample.1 <- X.sample[1:20, ]
X.sample.2 <- X.sample[21:40, ]
Y <- as.data.frame(cbind(X.sample.1$ID, X.sample.1$x, X.sample.2$ID, X.sample.2$x))
cor.results <- cor.test(Y[,2], Y[,4], alternative = c("greater"), method = c("pearson"))
cor.results$estimate
}
Z = sapply(x, myfunction)
#Here every element of x contains the arguments you want to pass to my function
#You can pass multiple arguments separated by commas after the function name
error <- qt(0.975, df = (length(Z) - 1)) * (sd(Z))/sqrt(length(Z))
Вы можете сделать это, но я считаю, что лучше просто использоватьboot()
функция в пакете boot
, если вы можете.
Что касается set.seed()
Вам нужно установить его непосредственно перед КАЖДЫМ разом, когда вы генерируете что-либо случайное.См. Ниже.
> rnorm(6)
[1] 1.0915017 -0.6229437 -0.9074604 -1.5937133 0.3026445 1.6343924
> set.seed(1001)
> rnorm(6)
[1] 2.1886481 -0.1775473 -0.1852753 -2.5065362 -0.5573113 -0.1435595
> set.seed(1001)
> rnorm(6)
[1] 2.1886481 -0.1775473 -0.1852753 -2.5065362 -0.5573113 -0.1435595
> rnorm(6)
[1] 1.0915017 -0.6229437 -0.9074604 -1.5937133 0.3026445 1.6343924
> set.seed(1001)
> sample(1:5,10,replace=T)
[1] 5 3 3 3 3 5 1 1 2 4
> sample(1:5,10,replace=T)
[1] 3 1 5 3 2 5 1 2 1 4
> set.seed(1001)
> sample(1:5,10,replace=T)
[1] 5 3 3 3 3 5 1 1 2 4
> rnorm(6)
[1] -0.1435595 1.0915017 -0.6229437 -0.9074604 -1.5937133 0.3026445
> set.seed(1001)
> rnorm(6)
[1] 2.1886481 -0.1775473 -0.1852753 -2.5065362 -0.5573113 -0.1435595
Надеюсь, что это поможет!
При исследовании функции boot
, чтобы дать вам пример, я столкнулся с загадкой.Он возвращает только один ряд.Странный!Я мог бы начать новый вопрос об этом.В любом случае, я думаю, что функция bootstrap()
в пакете bootstrap
сделает то, что вы ищете.Вот мой пример
set.seed(1001)
X <- rnorm(600, 7, 2)
myStat <- function(x, pairs) {
index = sample(1:length(x),(pairs*2))
Z = cor(X[index[1:(length(index)/2)]], X[index[((length(index)/2)+1):length(index)]])
return(Z)
}
b=bootstrap(X,1000,myStat,pairs=20)
Z <- b$thetastar
error <- qt(0.975, length(Z)-1 * sd(Z)/sqrt(length(Z)))