我已经阅读过CSV并希望找到“空”行和列,应用类似的内容
isempty = function(x) all(is.na(x) | x == 0 | x == "")
到所有列。第一列是模式字符,所有其他列都是数字。
但是,当我emptycols = apply(mydf, 2, isempty)
时,返回的逻辑向量全部为FALSE
。
当我尝试emptycols = apply(mydf[ , -1], 2, isempty)
它完美无缺时,返回一个逻辑向量,对于所有“空”列都为TRUE。
我知道我可以使用sapply,无论如何都能正常工作,我仍然想知道:是什么导致了这种行为?第一个(字符)列如何影响我的函数应用于所有其他列?
答案 0 :(得分:2)
@Backlin是对的。如果您更改isemtpy,请执行以下操作:
isempty = function(x) c(typeof(x), all(x == 0 | is.na(x) | x == ""))
以下结果显示了会发生什么:
> apply(mydata, 2, isempty)
one two three
[1,] "character" "character" "character"
[2,] "FALSE" "FALSE" "FALSE"
> apply(mydata[,-1], 2, isempty)
two three
[1,] "integer" "integer"
[2,] "TRUE" "TRUE"
引用@Backlin:“第一列导致应用将数据帧转换为字符矩阵,其中”0“不匹配0.但是,当你[, - 1]它变成了数字矩阵,它工作正常。“
sapply表现得更好:
> sapply(mydata, isempty)
one two three
[1,] "character" "integer" "integer"
[2,] "FALSE" "TRUE" "TRUE"