簡體   English   中英

如何在 R

[英]How can I select a specific element across all rows from a list within a tibble in R

我有一個小標題,其中一列是包含 2x2 矩陣的列表。 我希望能夠 select 來自 tibble 中所有行的矩陣中的特定元素。 我能夠使用索引 select 來自一個 tibble 行的特定元素:

t1 <- tibble(x = 1:2, y = 1, z = x ^ 2 + y)
rM1 <- matrix(c(2,3,1,4), nrow=2, ncol=2, byrow = TRUE)
rM2 <- matrix(c(10,19,9,15), nrow=2, ncol=2, byrow = TRUE)
t1$my.lists <- list(rM1,rM2)

t1[[4]][[2]][[2,2]]
[1] 15

但是,當我嘗試跨多行訪問該特定元素時,出現錯誤:

t1[[4]][1:2][[2,2]]
Error in t1[[4]][1:2][[2, 2]] : incorrect number of subscripts

我也嘗試過使用管道和切片等函數,但仍然無法達到預期的結果。 在此示例中,我期望返回:

[1]  4 15

其中 4 是來自 rM1 的 2x2 元素,15 是來自 rM2 的 2x2 元素。 當然,我可以編寫一個循環來實現這一點,但我認為還有一種更直接的方法可以做到這一點。

我們可以使用sapply循環list第 4 列,並根據行/列索引提取元素

sapply(t1[[4]], function(x) x[2, 2])
#[1]  4 15

或與map

library(dplyr)
library(purrr)
t1 %>%
      mutate(new = map_dbl(my.lists, ~ .x[2, 2]))
# A tibble: 2 x 5
#      x     y     z my.lists            new
#  <int> <dbl> <dbl> <list>            <dbl>
#1     1     1     2 <dbl[,2] [2 × 2]>     4
#2     2     1     5 <dbl[,2] [2 × 2]>    15

OP 的代碼沒有成功,因為下面是一個list

t1[[4]][1:2]
#[[1]]
#     [,1] [,2]
#[1,]    2    3
#[2,]    1    4

#[[2]]
#     [,1] [,2]
#[1,]   10   19
#[2,]    9   15

並且可以通過逐個選擇每個list元素或使用循環來完成行/列索引

t1[[4]][1:2][[2]][2,2]
#[1] 15

暫無
暫無

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

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