Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:确定数据帧中数值变量的优雅方法_R_Vectorization - Fatal编程技术网

R:确定数据帧中数值变量的优雅方法

R:确定数据帧中数值变量的优雅方法,r,vectorization,R,Vectorization,下面是我用来在数据框中查找数值变量的代码: Data <- iris numericvars <- NULL for (Var in names(Data)) { if(class(Data[,Var]) == 'integer' | class(Data[,Var]) == 'numeric') { numericvars <- c(numericvars,Var) } } numericvars Data这是一个非常简单的单行程序,带有sa

下面是我用来在数据框中查找数值变量的代码:

Data <- iris
numericvars <- NULL
for (Var in names(Data)) {
    if(class(Data[,Var]) == 'integer' | class(Data[,Var]) == 'numeric') {
        numericvars <- c(numericvars,Var)
    }
}
numericvars

Data这是一个非常简单的单行程序,带有
sapply

sapply(Data, is.numeric)
# Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
#         TRUE         TRUE         TRUE         TRUE        FALSE

# is.numeric should pick up integer columns too
Data$Species <- as.integer(Data$Species)
sapply(Data, is.numeric)
# Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
#         TRUE         TRUE         TRUE         TRUE         TRUE
sapply(数据,是数字)
#萼片。长萼片。宽花瓣。长花瓣。宽种
#真假
#is.numeric也应该选择整数列
数据$Species这里使用
sapply()
lappy()
似乎合乎逻辑:

sapply(iris, function(x) class(x) %in% c("integer","numeric"))
其中:

> sapply(iris, function(x) class(x) %in% c("integer","numeric"))
Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
        TRUE         TRUE         TRUE         TRUE        FALSE
值得注意的是,在循环中,您在循环的每次迭代中都在增加
numericvars
向量;在R中,这是一个很大的禁忌!它强制R每次复制和展开向量。事先分配足够的存储空间,并填写物品;在这里,这意味着创建
numericvars
as

numericvars <- character(length = ncol(iris))

numericvars这有点紧:

R> sapply(colnames(iris), function(x) inherits(iris[,x], c("numeric","integer")))
Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
        TRUE         TRUE         TRUE         TRUE        FALSE 
R> 
plyr中还有
colwise()
numcolwise()
catcolwise()
colwise()
将在向量上运行的函数转换为在数据帧上按列运行的函数
numcolwise
catcolwise
分别提供仅对数值变量和离散变量进行操作的版本

library(plyr)
colwise(is.numeric)(Data)

> colwise(is.numeric)(Data)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1         TRUE        TRUE         TRUE        TRUE   FALSE

循环中不断增长的对象是不允许的(
numericvars Ooops。我想我来晚了一会儿。是否有任何理由对列名而不是通过
data.frame
本身
sapply(iris,inherits,c(“numeric”,“integer”))
物种在第二次尝试中是真实的。@Dirk:…根据
,它应该是.numeric
。在这里睡着了--我错过了你将因子转换为整数的过程。眼睛盯着冰球,还是盯着球员?和足球一样;眼睛盯着球员的下半身。
library(plyr)
colwise(is.numeric)(Data)

> colwise(is.numeric)(Data)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1         TRUE        TRUE         TRUE        TRUE   FALSE