在我的函数'descr.mol[,apply(descr.mol,2, function(x){!any(is.na(x))})]'中,'function(x){!any(is.na(x))})

  • 本文关键字:is any function na descr mol 函数 apply r
  • 更新时间 :
  • 英文 :

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(

相关内容

最新更新