> is.numeric_data.frame=function(x)all(sapply(x,is.numeric))
> is.numeric_data.frame(d1[[5]])
[1] TRUE
Почему
d1
является списком, следовательно, d1[5]
является списком длины 1, и в этом случае содержит data.frame
. чтобы получить фрейм данных, используйте d1[[5]]
.
Даже если фрейм данных содержит числовые данные, сам по себе он не является числовым:
> x = data.frame(1:5,6:10)
> is.numeric(x)
[1] FALSE
Отдельные столбцы в кадре данных являются числовыми или не числовыми. Например:
> z <- data.frame(1:5,letters[1:5])
> is.numeric(z[[1]])
[1] TRUE
> is.numeric(z[[2]])
[1] FALSE
Если вы хотите узнать, являются ли ВСЕ столбцы в фрейме данных числовыми, вы можете использовать all
и sapply
:
> sapply(z,is.numeric)
X1.5 letters.1.5.
TRUE FALSE
> all(sapply(z,is.numeric))
[1] FALSE
> all(sapply(x,is.numeric))
[1] TRUE
Вы можете обернуть все это в удобную функцию:
> is.numeric_data.frame=function(x)all(sapply(x,is.numeric))
> is.numeric_data.frame(d1[[5]])
[1] TRUE