在 R 中循环采样以创建许多向量

Looping over sampling in R to create many vectors

我正在使用以下 R 代码进行一些 PCA 分析:

sigma1 <- as.matrix((data[,3:22]))
sigma2 <- as.matrix((data[,23:42]))
sample1 <- mvrnorm(n = 250, mu = as_vector(data[,1]), Sigma = sigma1)
sample2 <- mvrnorm(n = 250, mu = as_vector(data[,2]), Sigma = sigma2)
sampCombined <- rbind(sample1, sample2);
covCombined <- cov(sampCombined);
covCombinedPCA <- prcomp(sampCombined);
eigenvalues <- covCombinedPCA$sdev^2;

我想 repeat/loop 这个,这样我就有 50 个特征值向量。然后我想在 50 次重复中找到特征值的平均向量。我该怎么做?

您可以将整个代码放在一个函数中。假设该函数称为 eigen_fun.

eigen_fun <- function(data) {
  sigma1 <- as.matrix((data[,3:22]))
  sigma2 <- as.matrix((data[,23:42]))
  sample1 <- mvrnorm(n = 250, mu = as_vector(data[,1]), Sigma = sigma1)
  sample2 <- mvrnorm(n = 250, mu = as_vector(data[,2]), Sigma = sigma2)
  sampCombined <- rbind(sample1, sample2);
  covCombined <- cov(sampCombined);
  covCombinedPCA <- prcomp(sampCombined);
  eigenvalues <- covCombinedPCA$sdev^2;
  return(eigenvalues)
}

运行 eigen_fun(data) 一次给你一组值。要重复 50 次,您可以使用 replicate.

mat <- replicate(50, eigen_fun(data))

mat 中的每一列都是一组值,要获得每次迭代的 mean,您可以使用 colMeans :

colMeans(mat)