2

我已阅读 CSV 并希望找到“空”行和列,将类似 的内容isempty = function(x) all(is.na(x) | x == 0 | x == "") 应用于所有列。第一列是模式字符,所有其他都是数字。

但是,当我执行emptycols = apply(mydf, 2, isempty)返回的逻辑向量时 all FALSE

当我尝试emptycols = apply(mydf[ , -1], 2, isempty)它完美地工作时,返回一个对于所有“空”列都为 TRUE 的逻辑向量。

我知道我可以只使用 sapply,它仍然可以正常工作,但我仍然想知道:是什么导致了这种行为?第一个(字符)列如何影响我的函数对所有其他列的应用?

4

1 回答 1

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"   
于 2012-08-17T12:47:49.807 回答