繁体   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