【问题标题】:Why does sapply return a matrix when used with is.na on this data frame?为什么 sapply 在此数据帧上与 is.na 一起使用时会返回一个矩阵?
【发布时间】:2017-08-06 03:06:21
【问题描述】:

我正在尝试获取数据框列中存在的所有 NA 的计数,并且 sapply() 正在返回一个矩阵。相同的尺寸和所有内容,之后调用 data.frame() 很容易,但我很好奇它为什么会这样做。似乎 apply([df], 1, [is.na]) 做同样的事情。有什么想法吗?下面是可重现的代码。

df1 <-data.frame(matrix(c(rep(c(1:10, NA), 9), NA), nrow = 10)) 
  #make a data frame with some NAs
df2 <- sapply(df1, is.na)
class(df2) 
  #returns "matrix"
df3 <- apply(df1, 1, is.na)
class(df3) 
  #also returns "matrix"

【问题讨论】:

    标签: r matrix dataframe apply sapply


    【解决方案1】:

    因为lapply 对列表进行操作并强制转换为列表,而sapply 是lapply 的“简化”形式,它试图根据结果方便并强制转换为向量或矩阵。

    来自文档:

    lapply 返回一个与 X 长度相同的列表,其中每个元素是对 X 的相应元素应用 FUN 的结果。 sapply 是 lapply 的“用户友好”版本,如果合适,默认返回一个向量或矩阵。

    【讨论】:

    • ...以及来自?apply的相应直接引用:“如果X不是数组而是具有非空dim值的类的对象(例如数据框),则应用如果它是二维的(例如,数据框)或通过 as.array,则尝试通过 as.matrix 将其强制转换为数组。”。
    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多