Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从R中矩阵的每一行中选择一个元素_R_Vectorization - Fatal编程技术网

从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

这个问题与相同,但在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
[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,谢谢!