R 如果数据帧是列表的列表,那么is.na(df)是如何工作的?
我有一个data.frame,我想知道其中哪些值是NA。所以我可以做R 如果数据帧是列表的列表,那么is.na(df)是如何工作的?,r,dataframe,R,Dataframe,我有一个data.frame,我想知道其中哪些值是NA。所以我可以做is.na(df)。这很有效,但我不明白为什么。我认为data.frame是一个列表列表,因此询问is.na(df)会告诉我这些列表中的每一个是否都是na,当然不是(因为它们是列表)。所以我认为它会返回一个向量FALSE,每列一个 相反,它以某种方式做了其他事情。这是如何工作的?您可以查看代码并查看.data.frame-方法的功能: > methods(is.na) [1] is.na,abIndex-method
is.na(df)
。这很有效,但我不明白为什么。我认为data.frame是一个列表列表,因此询问is.na(df)
会告诉我这些列表中的每一个是否都是na,当然不是(因为它们是列表)。所以我认为它会返回一个向量FALSE
,每列一个
相反,它以某种方式做了其他事情。这是如何工作的?您可以查看代码并查看
.data.frame
-方法的功能:
> methods(is.na)
[1] is.na,abIndex-method is.na,denseMatrix-method is.na,indMatrix-method
[4] is.na,nsparseMatrix-method is.na,nsparseVector-method is.na,sparseMatrix-method
[7] is.na,sparseVector-method is.na.coxph.penalty* is.na.data.frame
[10] is.na.data.table* is.na.numeric_version is.na.POSIXlt
[13] is.na.raster* is.na.ratetable* is.na.Surv
[16] is.na.times*
see '?methods' for accessing help and source code
> is.na.data.frame
function (x)
{
y <- if (length(x)) {
do.call("cbind", lapply(x, "is.na"))
}
else matrix(FALSE, length(row.names(x)), 0)
if (.row_names_info(x) > 0L)
rownames(y) <- row.names(x)
y
}
<bytecode: 0x7fc7187b5f48>
<environment: namespace:base>
您可以查看代码并查看
.data.frame
-方法的作用:
> methods(is.na)
[1] is.na,abIndex-method is.na,denseMatrix-method is.na,indMatrix-method
[4] is.na,nsparseMatrix-method is.na,nsparseVector-method is.na,sparseMatrix-method
[7] is.na,sparseVector-method is.na.coxph.penalty* is.na.data.frame
[10] is.na.data.table* is.na.numeric_version is.na.POSIXlt
[13] is.na.raster* is.na.ratetable* is.na.Surv
[16] is.na.times*
see '?methods' for accessing help and source code
> is.na.data.frame
function (x)
{
y <- if (length(x)) {
do.call("cbind", lapply(x, "is.na"))
}
else matrix(FALSE, length(row.names(x)), 0)
if (.row_names_info(x) > 0L)
rownames(y) <- row.names(x)
y
}
<bytecode: 0x7fc7187b5f48>
<environment: namespace:base>
查看一下
is.na.data.frame
,它将is.na
函数跨列传递一次。因此,例如,如果x
是数据帧中的一列,那么看看x会发生什么大多数数据帧不是列表列表,而是向量列表。看看is.na.data.frame
,它将is.na
函数跨列传递一次。例如,如果x
是数据帧中的一列,那么看看x会发生什么大多数数据帧不是列表列表,而是向量列表。