我有一个矩阵,H。我想从每一行中选择一个值,从向量P中选择列。
H = matrix(data=runif(6),ncol=2)
P = c(2,1,2)我想要的输出是一个包含以下内容的向量
c(H[1,P[1]],H[2,P[2]],H[3,P[3]])我正在处理更大的数据,所以一种通用的方法是很好的。
这可以实现diag(H[,P]),但是:( a)我不明白为什么H[,P]返回一个方阵;( b)我不想使用额外的函数(在本例中是diag)。
如果以前有人问过这件事,我很抱歉。
发布于 2014-11-19 18:08:29
试一试
H[cbind(seq_len(nrow(H)), P)]
## [1] 0.6733731 0.7396847 0.5953580在这里,我们用P中指示的连续行和列来索引
关于您的问题,所以H[, P]返回矩阵的原因是您告诉R:
从矩阵"H“中选择列中的所有行: 2、1、2
因此,您得到的结果是一个具有相同的第一列和第三列的矩阵。
发布于 2014-11-19 18:12:32
但是:我不明白为什么H,P返回一个方阵,
H,P返回一个方阵,因为P是一个长度= 3的向量。这里,你基本上是说,你想要返回2,1,2列的矩阵。
如果您想要一个值,那么还需要传递一个行。如果你想让它随机选择一行,或者给它一个特定的行,你可以给它传递一个随机数或什么东西。例如,第1行:
H[1,P]或随机(但在整个矩阵中相同)行:
H[floor(runif(1, 1, dim(H)[1])),P]https://stackoverflow.com/questions/27023819
复制相似问题