首页 > 解决方案 > 为什么我的矩阵不能从字符转换为数字?

问题描述

我正在尝试标准化我的数据以用于神经网络。我的数据 train0 具有所有整数或双精度类型列,除了最后一个是一个因素。这是我尝试过的。

n <- ncol(train0)-1
y_train <- train0$ffail 
x_train <- as.matrix(train0[,4:n]) 

range_norm <- function(x) {
  ( (x - min(x)) / (max(x) - min(x)) )}
# Normalize training and test data
x_train_norm <- apply(x_train, 2, range_norm)

但我不断收到此错误:Error in x - min(x) : non-numeric argument to binary operator

我已经检查了 x_train 中每一列的类型,它说明了它们的所有字符,所以我尝试像这样转换为数字

  for(i in 1:ncol(x_train)){
       x_train1[,i] <- as.numeric(x_train[,i])
       print(typeof(x_train1[,i]))
     }

但是,在我使用 之后as.numeric,我打印要检查的每一列的类型,它们仍然是字符。

在尝试规范化数据以及如何将数据转换为数字矩阵方面,我将不胜感激。谢谢

标签: r

解决方案


这是将矩阵转换为character矩阵的一种方法numeric

m = matrix(as.character(1:9), 3, 3)                                         

m                                                                           
##      [,1] [,2] [,3]
## [1,] "1"  "4"  "7" 
## [2,] "2"  "5"  "8" 
## [3,] "3"  "6"  "9" 

apply(m, 2, as.numeric)                                                     
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

推荐阅读