[英]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.