应用中的is.numeric和is.numeric选项显示不同的结果

时间:2013-10-22 10:11:42

标签: r

我有一个数据集,其中包含大约200个字段和1000000条记录,格式如下:

Acc Field1 Field2 Field3 .....    
101   23   34   78    
102   6    1.2  89    
.
.
.

当我输入命令

apply(dat3[varlist[9]],2,is.numeric)

我得到了字段名称的确认结果为TRUE,但是当我尝试测试为is.numeric(dat3[varlist[9]])时,我收到了一个FALSE。

其中dat3是我正在处理的数据帧,varlist是使用命令创建的:

varlist <- names(dat3) 

varlist包含数据框中的所有变量列表。

附件是实时截图。

我不明白我在这里做错了什么。

任何人的帮助都表示赞赏。

enter image description here

3 个答案:

答案 0 :(得分:4)

在数据框上逐列执行测试的标准方法是使用sapply

sapply(mtcars, is.numeric)
sapply(CO2, is.numeric)

(尝试将is.numeric换成class。)

答案 1 :(得分:2)

以这种方式在data.frame上使用[将返回另一个(较小的数据帧)。您需要使用[[,或使用[的多索引版本以便应用删除。例如:

class(mtcars[3])
[1] "data.frame"
is.numeric(mtcars[3])
[1] FALSE
is.numeric(mtcars[[3]])
[1] TRUE
is.numeric(mtcars[,3])
[1] TRUE

答案 2 :(得分:1)

如果你这样做

varlist <- names(iris)
iris[varlist[1]]

您正在使用所选列定义新数据框,而不是变量本身。

DO

iris[,colnames(iris) %in% varlist[1]]
is.numeric( iris[,colnames(iris) %in% varlist[1]])
#[1] TRUE

下次请尝试制作可重现的例子