在列表中的列表内找到矩阵内的向量的存在

时间:2015-10-19 09:50:30

标签: r list exists

我尝试使用R在列表中的列表中查找矩阵内的向量。我试过如果使用下面的'exists'代码存在向量'ab',但它们都不起作用。我怎样才能使它发挥作用?

 aa <- list(x = matrix(1,2,3), y = 4, z = 3)
 colnames(aa$x) <- c('ab','bb','cb')
 aa 
 #$x
 #     ab bb cb
 #[1,]  1  1  1
 #[2,]  1  1  1
 #
 #$y
 #[1] 4
 #
 #$z
 #[1] 3

 exists('ab', where=aa)
 #[1] FALSE
 exists('ab', where=aa$x)
 # Error in exists("ab", where = aa$x) : invalid 'envir' argument
 exists('ab', where=colnames(aa$x))
 # Error in as.environment(where) : no item called "ab" on the search list
 colnames(aa$x)
 #[1] "ab" "bb" "cb"

1 个答案:

答案 0 :(得分:3)

列名称是matrixdata.frames的一部分。因此,我们使用list遍历sapply,获取列名称(colnames),unlist并检查'ab'是否属于vector < / p>

'ab' %in% unlist(sapply(aa, colnames)) 
#[1] TRUE

如果我们想要更具体地针对特定的list元素,我们会提取元素(aa$x),获取列名称并检查其中是否包含“ab”。

'ab' %in% colnames(aa$x)
#[1] TRUE

或者另一种选择是循环'aa',if元素是matrix,提取'ab'列并检查它是否是vector,换行sapplyany TRUE/FALSE输出一个any(sapply(aa, function(x) if(is.matrix(x)) is.vector(x[, 'ab']) else FALSE))

Server error

500