从R中矩阵的每一行中选择一个元素
这个问题与相同,但在R中,我有一个矩阵和一个向量从R中矩阵的每一行中选择一个元素,r,vectorization,R,Vectorization,这个问题与相同,但在R中,我有一个矩阵和一个向量 length(vec) == nrow(mat) v[i] == mat[v[i],i] 如何得到这样的向量 length(vec) == nrow(mat) v[i] == mat[v[i],i] 我试图通过使用逻辑矩阵来实现这一点: >a = matrix(runif(12),4,3) a [,1] [,2] [,3] [1,] 0.6077585 0.5354680 0.2802681
length(vec) == nrow(mat)
v[i] == mat[v[i],i]
如何得到这样的向量
length(vec) == nrow(mat)
v[i] == mat[v[i],i]
我试图通过使用逻辑矩阵来实现这一点:
>a = matrix(runif(12),4,3)
a
[,1] [,2] [,3]
[1,] 0.6077585 0.5354680 0.2802681
[2,] 0.2596180 0.6358106 0.9336301
[3,] 0.5317069 0.4981082 0.8668405
[4,] 0.6150885 0.5164009 0.5797668
> sel = col(a) == c(1,3,2,1)
> sel
[,1] [,2] [,3]
[1,] TRUE FALSE FALSE
[2,] FALSE FALSE TRUE
[3,] FALSE TRUE FALSE
[4,] TRUE FALSE FALSE
> a[sel]
[1] 0.6077585 0.6150885 0.4981082 0.9336301
它选择了正确的元素,但打乱了顺序。我也想过使用mapply,但我不知道如何让它在行中迭代,就像在apply中一样
upd:@gsk3建议使用as.listas.data.frameta,这样做有效。但我还是想知道是否有一种更矢量化的方式,没有列表。我不是100%确定我理解你的问题,但这似乎很接近
> b=c(1,3,2,1)
> i=cbind(1:nrow(a),b)
> a[i]
我不是100%肯定我理解你的问题,但这似乎很接近
> b=c(1,3,2,1)
> i=cbind(1:nrow(a),b)
> a[i]
使用mapply制作一个向量列表:as.listas.data.frameaThis帮助您,除了您应该做的行as.listas.data.frameta,谢谢!使用mapply制作一个向量列表:as.listas.data.frameaThis帮助您,除了您应该做的行as.listas.data.frameta,谢谢!