为什么在这个数据框上与 is.na 一起使用时应用 return 矩阵?
Why does sapply return a matrix when used with is.na on this data frame?
我正在尝试获取数据框列中存在的所有 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"
因为 lapply
对列表进行操作和强制转换,而 sapply
是 lapply
的 "simplified" 形式,它试图方便并强制转换为向量或矩阵取决于结果。
来自文档:
lapply returns a list of the same length as X, each element of which is the result of applying FUN to the corresponding element of X.
sapply is a “user-friendly” version of lapply by default returning a vector or matrix if appropriate.
我正在尝试获取数据框列中存在的所有 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"
因为 lapply
对列表进行操作和强制转换,而 sapply
是 lapply
的 "simplified" 形式,它试图方便并强制转换为向量或矩阵取决于结果。
来自文档:
lapply returns a list of the same length as X, each element of which is the result of applying FUN to the corresponding element of X. sapply is a “user-friendly” version of lapply by default returning a vector or matrix if appropriate.