矩阵错误:R中需要数字

时间:2016-07-21 19:56:03

标签: r matrix

Phi <- as.matrix(cbind(1, train.data)) # add a column of 1 as phi_0
train.len <- 75
eta <- 0.01 # Learning rate
epsilon <- 0.001 # 
tau.max <- 75 # Maximum number of iterations

T <- ifelse(train.label == c0, eval(parse(text=c0)),eval(parse(text=c1))) labels

W <- matrix(,nrow=tau.max, ncol=ncol(Phi)) # Empty Weight vector
W[1,] <- runif(ncol(Phi)) # Random initial values for weight vector

error.trace <- matrix(0,nrow=tau.max, ncol=1) # Placeholder for errors
error.trace[1] <- sum((Phi%*%W[1,])*T<0)/train.len*100 

train.data看起来像:

x1    x2    x3    x4    y
5.1   3.5   1.4   0.2   C1
4.7   3.2   1.3   0.2   C1
35.0  3.6   1.4   0.2   C1

问题发生在最后一行。我查了一些其他帖子(Matrix expression causes error "requires numeric/complex matrix/vector arguments"?)。他们说要确保数据是矩阵格式,我还检查它们都是数字的(PhiW)。

我得到的错误是

  

Phi%*%W [1,]出错:     需要数字/复杂矩阵/向量参数

1 个答案:

答案 0 :(得分:1)

我生成一些玩具数据时没有错误:train.data <- rnorm(75)。你的train.data是什么?一个数据框?如果是,那么sapply(train.data, class)是什么?我怀疑你有因素/角色。在这种情况下,矩阵Phi将是一个字符矩阵,而不是数字矩阵。

也许你应该尝试使用:

Phi <- cbind(1, data.matrix(train.data))

阅读?data.matrix了解更多信息。另一种方法是使用:

Phi <- cbind(1, sapply(train.data, as.numeric))

<强>更新

确实你有一个列y,它是一个因子或字符列。我的解决方案将起作用。但是,我不知道你的上下文,所以你应该问自己是否有必要将y列包含在计算中。如果您不想要它,请删除它并使用:

Phi <- cbind(1, as.matrix(train.data[,1:4]))