apply(x,2,FUN)和apply(x [, - 1],2,FUN)之间的区别

时间:2012-08-17 09:03:43

标签: r apply

我已经阅读过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,无论如何都能正常工作,我仍然想知道:是什么导致了这种行为?第一个(字符)列如何影响我的函数应用于所有其他列?

1 个答案:

答案 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"