【问题标题】:Referencing Column Index Value In Formula在公式中引用列索引值
【发布时间】:2017-07-04 16:36:25
【问题描述】:

我希望使它更简洁。我想要一个矩阵“mat”,它具有基于概率返回的二进制数据值 (0,1)。目前我已经单独创建了每一列,并将使用cbind 创建最终矩阵:

mat1=matrix(rbinom(100,1,1), 100, 1) 
mat2=matrix(rbinom(100,1,1/2), 100, 1) 
mat3=matrix(rbinom(100,1,1/3), 100, 1)
mat4=matrix(rbinom(100,1,1/4), 100, 1)
mat5=matrix(rbinom(100,1,1/5), 100, 1)
mat6=matrix(rbinom(100,1,1/6), 100, 1)
mat7=matrix(rbinom(100,1,1/7), 100, 1)
mat8=matrix(rbinom(100,1,1/8), 100, 1)
mat9=matrix(rbinom(100,1,1/9), 100, 1)
mat10=matrix(rbinom(100,1,1/10), 100, 1) 

但是概率可以由函数 1/k 确定,其中 k 是列索引默认数,但我不确定如何引用列索引。这怎么可能简化呢?是否可以使用函数来解释所有这些重复(即 k=k+1...)。

【问题讨论】:

  • sapply(1:10, function(x) rbinom(100, 1, 1/x))?
  • 太棒了!我只使用 R 一个星期,我花了大约 4 个小时试图弄清楚这一点,很尴尬。谢谢

标签: r matrix indexing cbind


【解决方案1】:

您可以使用 for 循环作为“快速而肮脏”的解决方案:

# setting seed for comparison later on
# set.seed(1111)

# preparing an empty vector
out<-c()

# for-loop
for (k in 1:10){
  out<-c(out, rbinom(100,1,1/k))
}
out<-matrix(out, 100, 10)

这里,k 在第一次迭代中是 1,在第二次迭代中是 2,依此类推。一切都存储在一个调用的向量中。矩阵函数默认按列填充矩阵。因此,out是一个100*10的矩阵,每一列都属于k的一个值。

为了证明它会产生与您的方法完全相同的矩阵:

set.seed(1111)
mat1=matrix(rbinom(100,1,1), 100, 1) 
mat2=matrix(rbinom(100,1,1/2), 100, 1) 
mat3=matrix(rbinom(100,1,1/3), 100, 1)
mat4=matrix(rbinom(100,1,1/4), 100, 1)
mat5=matrix(rbinom(100,1,1/5), 100, 1)
mat6=matrix(rbinom(100,1,1/6), 100, 1)
mat7=matrix(rbinom(100,1,1/7), 100, 1)
mat8=matrix(rbinom(100,1,1/8), 100, 1)
mat9=matrix(rbinom(100,1,1/9), 100, 1)
mat10=matrix(rbinom(100,1,1/10), 100, 1) 
mat<-cbind(mat1,mat2, mat3,mat4,mat5,mat6,mat7,mat8,mat9,mat10)

identical(mat, out)

相同的函数应该证明for循环的作用相同。但是,可能有与 R 程序员一样多的其他方法来执行此操作。

您可能会发现 R-Package “漩涡”很有用。它以交互方式教您如何执行此类任务!

编辑:好的,我来晚了。 NRussell 已经在 cmets 中给出了更好的(就更短的代码、更好的性能而言)答案;)

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2018-02-19
  • 2022-07-04
  • 2015-06-06
  • 2021-11-16
  • 2023-03-12
  • 2014-02-10
  • 1970-01-01
  • 2020-12-31
  • 2015-07-14
相关资源
最近更新 更多