【问题标题】:Looping over sampling in R to create many vectors在 R 中循环采样以创建许多向量
【发布时间】:2020-08-17 07:31:07
【问题描述】:

我正在使用以下 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;

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

【问题讨论】:

  • 为什么投反对票?
  • 不是我的反对票,但我猜反对票的原因是缺少reproducible example

标签: r pca


【解决方案1】:

您可以将整个代码放在一个函数中。假设该函数名为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)

【讨论】:

  • 感谢您的回答。所以把它放在大括号eigen_fun() {}?我得到Error: unexpected '{' in "eigen_fun() {"
  • 太棒了!非常感谢!出于好奇,整个代码都应该放在函数中吗?还是应该只是样本生成后的一部分?我不确定哪一个有意义。
  • 您可以从函数中取出前两行,即 sigma1sigma2 部分,因为这将是相同的。其余的都需要在函数中。
  • 所以结果不会改变?
  • 是的,结果是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
相关资源
最近更新 更多