【问题标题】:Matrix Error: Requires numeric in R矩阵错误:在 R 中需要数字
【发布时间】:2016-11-25 13:53:23
【问题描述】:
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, ] 中的错误: 需要数值/复数矩阵/向量参数

【问题讨论】:

  • 您希望在矩阵乘法期间train.data 中的y 列会发生什么?

标签: r matrix


【解决方案1】:

当我生成一些玩具数据时,我没有收到任何错误:train.data &lt;- 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]))

【讨论】:

  • 噢!这就是你在凌晨 3 点做 R 时会发生的事情!我完全忽略了我的 Y 柱。是的,掉了,现在一切都好。谢谢!
猜你喜欢
  • 2021-01-27
  • 2018-06-04
  • 2017-03-12
  • 2019-12-03
  • 2014-05-19
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多