为什么在与此数据帧上的is.na一起使用时,sapply返回一个矩阵?

时间:2017-08-06 03:06:22

标签: r matrix dataframe apply sapply

我试图计算数据帧列中存在的所有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"

1 个答案:

答案 0 :(得分:2)

因为lapply操作并强制列表,sapplylapply的“简化”形式,试图方便并强制转换为矢量或矩阵,具体取决于结果

来自文档:

  

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