我试图计算数据帧列中存在的所有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"
答案 0 :(得分:2)
因为lapply
操作并强制列表,sapply
是lapply
的“简化”形式,试图方便并强制转换为矢量或矩阵,具体取决于结果
来自文档:
lapply返回与X相同长度的列表,其中每个元素都是将FUN应用于X的相应元素的结果。 sapply是lapply的“用户友好”版本,默认情况下返回一个向量或矩阵。