Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在appply中的if()之后处理NULL_R_Null_Apply - Fatal编程技术网

R 在appply中的if()之后处理NULL

R 在appply中的if()之后处理NULL,r,null,apply,R,Null,Apply,我遇到的情况是,apply返回一个包含许多NULL条目的列表。我使用的代码相当长,所以我用一个简单的例子重现了这个问题 # Generate data. df <- data.frame(a= c(1,2, NA, 6), b= c(1, 7, 3, 7)) # Return only columns that have NAs. my_list <- apply(df, 2, function(col_i){ if(any(is.na(col

我遇到的情况是,
apply
返回一个包含许多
NULL
条目的列表。我使用的代码相当长,所以我用一个简单的例子重现了这个问题

# Generate data.
df <- data.frame(a= c(1,2, NA, 6),
                 b= c(1, 7, 3, 7))

# Return only columns that have NAs.
my_list <- apply(df, 2, function(col_i){
  if(any(is.na(col_i))){
    return(col_i)
  }})
我的问题是,我得到了许多
Null
条目,因此无法处理结果。我如何(a)避免申请返回
NULL
条目,或(b)放弃
my_列表中的所有
NULL
条目

因此,预期的输出是

my_list
$a
[1]  1  2 NA  6

同样,我使用的实际代码比这更复杂。因此,请不要建议使用类似于
df[,!complete.cases(t(df)),drop=FALSE]
的方法,它也会返回包含任何遗漏的列。我的问题不是如何获取包含任何遗漏的列,而是如何处理
apply
中的
NULL
条目。我想将
if
部分保留在
apply

中,每个函数都必须返回某些内容,因此您不能真正避免返回某些内容,但可以删除它们:

Filter(length, apply(df, 2, function(col_i) if(any(is.na(col_i))) return(col_i)))

#$a
#[1]  1  2 NA  6

每个函数都必须返回某些内容,因此您无法真正避免返回某些内容,但您可以删除它们:

Filter(length, apply(df, 2, function(col_i) if(any(is.na(col_i))) return(col_i)))

#$a
#[1]  1  2 NA  6

我会将
else
分支添加到
if
,可能会返回
NA
0
。首先,不要在data.frame上运行
apply
。请改用
laaply
。其次,只需先过滤数据,然后对其进行操作,例如,
df[colSums(is.na(df))]
将只返回您需要的列need@DavidArenburg请阅读我明确声明的问题,该问题与列中的
NA
无关。实际情况会使问题变得不必要的复杂,因此我用一个简单的例子再现了这个问题。此外,我认为没有理由不使用apply。它是在Ronak Shah的帮助下工作的。你看不到它并不意味着它不存在。@Davidernburg我的代码运行并回答了我的研究问题。我认为没有理由改变“一个运行的系统”。请解释您的选择,而不是简单地写“从不…”。我会在
if
中添加一个
else
分支,可能返回
NA
0
。首先,不要在data.frame上运行
apply
。请改用
laaply
。其次,只需先过滤数据,然后对其进行操作,例如,
df[colSums(is.na(df))]
将只返回您需要的列need@DavidArenburg请阅读我明确声明的问题,该问题与列中的
NA
无关。实际情况会使问题变得不必要的复杂,因此我用一个简单的例子再现了这个问题。此外,我认为没有理由不使用apply。它是在Ronak Shah的帮助下工作的。你看不到它并不意味着它不存在。@Davidernburg我的代码运行并回答了我的研究问题。我认为没有理由改变“一个运行的系统”。请解释你的选择,而不是简单地写“从不…”。