向矩阵添加新列出现错误

13
我想给现有矩阵添加一个新列,但每次都会收到警告。
我正在尝试这段代码:
normDisMatrix$newColumn <- labels

收到这条消息:

警告信息:在normDisMatrix$newColumn <- labels中:将LHS强制转换为列表

之后,当我检查矩阵时,它似乎是空的:

dim(normDisMatrix)
NULL

注意:标签只是具有从1到4之间数字的向量。

问题可能是什么?


5
你不能使用$来对矩阵进行子集操作 - 请查看我之前回答这个问题的底部部分:https://dev59.com/QWQn5IYBdhLWcg3woIYF#16682747 - thelatemail
你可以给我们一些数据,以便我们能够重现错误。就目前而言,我对'labels'、'normDisMatrix'和'myMatrix'一无所知。 - Jason
@Jason谢谢你的评论,我已经纠正了问题。 - seleucia
@thelatemai 谢谢您的回答,您能否建议我一种向矩阵添加列的方法。 - seleucia
1个回答

24

正如 @thelatemail 指出的那样,$运算符不能用于矩阵下标。因为矩阵只是一个具有维度属性的单个向量。当您使用$尝试添加新列时,R将您的矩阵转换为可以在向量上使用$的最低结构,即列表。

您需要的函数是cbind()(列绑定)。假设我有矩阵m

(m <- matrix(51:70, 4))
#      [,1] [,2] [,3] [,4] [,5]
# [1,]   51   55   59   63   67
# [2,]   52   56   60   64   68
# [3,]   53   57   61   65   69
# [4,]   54   58   62   66   70

要从名为labels的向量中添加新列,我们可以执行以下操作:

从一个叫做labels的向量中添加一列,我们可以这样做:

labels <- 1:4
cbind(m, newColumn = labels)
#                     newColumn
# [1,] 51 55 59 63 67         1
# [2,] 52 56 60 64 68         2
# [3,] 53 57 61 65 69         3
# [4,] 54 58 62 66 70         4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接