descr.mol.noNa <- descr.mol[,apply(descr.mol,2, function(x){!any(is.na(x))})]
我不得不运行这一行进行赋值,以从我的文件"descr.mol"中删除所有"NA"值,但我想知道它到底是如何工作的。我的作业没有提供进一步的解释或代码的分解。我想是.na(x(在我的对象x中搜索所有的na值,在这种情况下是descr.mol,但这是我能想到的全部,我想完全理解这条线以供将来参考会很好。
!any(is.na(x))
的解释
在通俗英语中,CCD_;没有";。
is.na()
返回给定向量的布尔向量TRUE
/FALSE
,其中TRUE
表示缺少值。如果没有丢失任何值,则!any()
返回TRUE
,如果至少缺少一个值,则返回FALSE
。
示例:
vec1 <- c(1, 2, 3)
vec2 <- c(1, 2, NA)
is.na(vec1)
#> [1] FALSE FALSE FALSE
is.na(vec2)
#> [1] FALSE FALSE TRUE
!any(is.na(vec1))
#> [1] TRUE
!any(is.na(vec2))
#> [1] FALSE
创建于2022-03-28由reprex包(v2.0.1(
代码说明
您的代码执行以下操作:
- 它创建了一个匿名函数,如果输入中没有NA值,则使用上面解释的逻辑返回
TRUE
- 它使用
apply
将此函数应用于desc.mol
的所有列,这将为desc.mol
中的每一列返回TRUE
/FALSE
的向量 - 然后,该向量用于按列对原始数据进行子集设置,以便只保留没有
NA
值的列
这是一个带有airquality
:的reprex
df <- head(airquality)
df
#> Ozone Solar.R Wind Temp Month Day
#> 1 41 190 7.4 67 5 1
#> 2 36 118 8.0 72 5 2
#> 3 12 149 12.6 74 5 3
#> 4 18 313 11.5 62 5 4
#> 5 NA NA 14.3 56 5 5
#> 6 28 NA 14.9 66 5 6
df[, apply(df, 2, function(x) {!any(is.na(x))})]
#> Wind Temp Month Day
#> 1 7.4 67 5 1
#> 2 8.0 72 5 2
#> 3 12.6 74 5 3
#> 4 11.5 62 5 4
#> 5 14.3 56 5 5
#> 6 14.9 66 5 6
创建于2022-03-29由reprex包(v2.0.1(
整洁的替代品
以下是我使用整洁方法进行同样操作的方法:
library(dplyr)
df %>%
select(where(~!any(is.na(.x))))
#> Wind Temp Month Day
#> 1 7.4 67 5 1
#> 2 8.0 72 5 2
#> 3 12.6 74 5 3
#> 4 11.5 62 5 4
#> 5 14.3 56 5 5
#> 6 14.9 66 5 6
创建于2022-03-29由reprex包(v2.0.1(