簡體   English   中英

將矩陣行放入列表中,但僅保留R中的前n個條目

[英]Put matrix rows into a list but keep only the first n entrys in R

我有一個矩陣,我想將其放入一個列表中,並將每一行作為一個列表元素。 這是用

m <- t(matrix(c(1:9), 3, 3))
splitted_by_row <- split(m, row(m))      #splits matrix by rows

但是我只想使用索引的ia向量保持每個矩陣行的前i個元素,例如

indices <- c(1,3,2)

然后輸出應該像這樣

output <- list(1, c(4,5,6), c(7,8))
output

我知道這可以通過for循環來完成,但是我正在尋找一個更簡單的解決方案,也許是lapply。 我試過了

l <- lapply(splitted_by_row, function(x) x[1:2])

這給了我每個列表元素的前兩個元素。 我如何更改代碼,因此它使用索引向量而不是1:2,所以我得到了所需的輸出?

我們可以使用Map ,將評估的相應元素list與“指標”的vector

 Map(function(x,y) x[seq(y)], splitted_by_row, indices)

另一個選擇是使用基於索引的row/column索引,然后基於row/column索引split 'm'的子集元素。

  i1 <- cbind(rep(seq_along(indices),indices), sequence(indices))
  split(m[i1], i1[,1])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM