我尝试使用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"
答案 0 :(得分:3)
列名称是matrix
或data.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
,换行sapply
与any
TRUE/FALSE
输出一个any(sapply(aa, function(x) if(is.matrix(x)) is.vector(x[, 'ab']) else FALSE))
。
Server error
500