R - 过滤矩阵基于真/假向量

Shu*_*huo 1 r vector matrix

我有一个可以包含向量和矩阵的数据结构.我想基于一个真正的假列来过滤它.我无法弄清楚如何成功过滤它们.

result <- structure(list(aba = c(1, 2, 3, 4), beta = c("a", "b", "c", "d"), 
chi = structure(c(0.438148361863568, 0.889733991585672, 0.0910745360888541, 
0.0512442977633327, 0.812013201415539, 0.717306115897372, 0.995319503592327, 
0.758843480376527, 0.366544214077294, 0.706843026448041, 0.108310810523108, 
0.225777650484815, 0.831163870869204, 0.274351604515687, 0.323493955424055, 
0.351171918679029), .Dim = c(4L, 4L))), .Names = c("aba", "beta", "chi"))

> result
$aba
[1] 1 2 3 4

$beta
[1] "a" "b" "c" "d"

$chi
           [,1]      [,2]      [,3]      [,4]
[1,] 0.43814836 0.8120132 0.3665442 0.8311639
[2,] 0.88973399 0.7173061 0.7068430 0.2743516
[3,] 0.09107454 0.9953195 0.1083108 0.3234940
[4,] 0.05124430 0.7588435 0.2257777 0.3511719

tf <- c(T,F,T,T)
Run Code Online (Sandbox Code Playgroud)

我想做的是像

> lapply(result,function(x) {ifelse(tf,x,NA)})
$aba
[1]  1 NA  3  4

$beta
[1] "a" NA  "c" "d"

$chi
[1] 0.43814836         NA 0.09107454 0.05124430
Run Code Online (Sandbox Code Playgroud)

但$ chi矩阵结构丢失了.

我期望的结果是

ifelse(matrix(tf,ncol=4,nrow=4),result$chi,NA)
           [,1]      [,2]      [,3]      [,4]
[1,] 0.43814836 0.8120132 0.3665442 0.8311639
[2,]         NA        NA        NA        NA
[3,] 0.09107454 0.9953195 0.1083108 0.3234940
[4,] 0.05124430 0.7588435 0.2257777 0.3511719
Run Code Online (Sandbox Code Playgroud)

我遇到问题的挑战是如何将tf向量与数据相匹配.感觉我需要使用基于数据类型的条件来设置它,我想避免.感谢您的想法和答案.

A5C*_*2T1 5

我不知道如何避免检查数据类型或数据的"维度".因此,我会提出类似的建议:

lapply(result, function(x) { 
  if (is.null(dim(x))) x[!tf] <- NA else x[!tf, ] <- NA
  x 
})
# $aba
# [1]  1 NA  3  4
# 
# $beta
# [1] "a" NA  "c" "d"
# 
# $chi
#            [,1]      [,2]      [,3]      [,4]
# [1,] 0.43814836 0.8120132 0.3665442 0.8311639
# [2,]         NA        NA        NA        NA
# [3,] 0.09107454 0.9953195 0.1083108 0.3234940
# [4,] 0.05124430 0.7588435 0.2257777 0.3511719
Run Code Online (Sandbox Code Playgroud)