R 为什么我的矩阵不是数字?

R 为什么我的矩阵不是数字?,r,matrix,R,Matrix,我有一个32X32矩阵,列和行代表每个NFL球队。横穿各行表示该队击败对手的平均水平(由列名表示) 我为每个团队创建了32个向量: nfl_data <- read.csv(file="2012NFLScoresMatrixNoNames.csv", h=T) colnames(nfl_data) <- NULL ari_s <- nfl_data[1,] atl_s <- nfl_data[2,] . . . was_s <- nfl_data[32,] a

我有一个32X32矩阵,列和行代表每个NFL球队。横穿各行表示该队击败对手的平均水平(由列名表示)

我为每个团队创建了32个向量:

nfl_data <- read.csv(file="2012NFLScoresMatrixNoNames.csv", h=T)
colnames(nfl_data) <- NULL

ari_s <- nfl_data[1,]
atl_s <- nfl_data[2,]
.
.
.
was_s <- nfl_data[32,]

a <- rbind(c(ari_s),c(atl_s),c(bal_s),c(buf_s),c(car_s),c(chi_s),c(cin_s),
    c(cle_s),c(dal_s),c(den_s),c(det_s),c(grn_s),c(hou_s),c(ind_s),
    c(jac_s),c(kc_s),c(mia_s),c(min_s),c(ne_s),c(no_s),c(nyj_s),
    c(nyg_s),c(oak_s),c(phi_s),c(pit_s),c(sd_s),c(sea_s),c(sf_s),
    c(stl_s),c(tb_s),c(tn_s),c(was_s))

a_trans <- t(a)
x <- solve(a_trans)

我一遍又一遍地看我是否有一个逗号,或者可能是一个o而不是一个0,但我什么也找不到。关于如何解决这个问题有什么建议吗?

对象
a
是一个列表,而不是矩阵或数据框。请查看您的代码:

a <- rbind(c(ari_s),c(atl_s),c(bal_s),c(buf_s),c(car_s),c(chi_s),c(cin_s),
    c(cle_s),c(dal_s),c(den_s),c(det_s),c(grn_s),c(hou_s),c(ind_s),
    c(jac_s),c(kc_s),c(mia_s),c(min_s),c(ne_s),c(no_s),c(nyj_s),
    c(nyg_s),c(oak_s),c(phi_s),c(pit_s),c(sd_s),c(sea_s),c(sf_s),
    c(stl_s),c(tb_s),c(tn_s),c(was_s))
函数
c
将class
data.frame
的对象转换为class
list
的对象

也许它更容易使用

solve(t(nfl_data))

由于
t
对象
a
是列表,而不是矩阵或数据帧,因此数据帧
nfl\u数据将转换为矩阵。请查看您的代码:

a <- rbind(c(ari_s),c(atl_s),c(bal_s),c(buf_s),c(car_s),c(chi_s),c(cin_s),
    c(cle_s),c(dal_s),c(den_s),c(det_s),c(grn_s),c(hou_s),c(ind_s),
    c(jac_s),c(kc_s),c(mia_s),c(min_s),c(ne_s),c(no_s),c(nyj_s),
    c(nyg_s),c(oak_s),c(phi_s),c(pit_s),c(sd_s),c(sea_s),c(sf_s),
    c(stl_s),c(tb_s),c(tn_s),c(was_s))
函数
c
将class
data.frame
的对象转换为class
list
的对象

也许它更容易使用

solve(t(nfl_data))

由于执行
str(a)
操作时的信息位
t
,数据帧
nfl\u数据
将转换为矩阵:

> str(a)
List of 1024
....
换句话说,
a
是一个列表,而不是一个矩阵。错误消息
'a'中的“numeric”限定符必须是数字矩阵
用于在用户尝试反转其他类型的矩阵(逻辑和字符)时阻止人们抱怨。在您的情况下,错误消息的意思是:“您没有给我一个任何排序的矩阵”

解决此问题的最简单方法就是转置数据帧:

solve(t(nfl_data))
其中,使用
t()
将通过
as.matrix()
强制功能将
nfl\U数据
数据帧转换为矩阵。为了更加明确,如果您的数据可能包含因子,那么您可能希望通过
data.matrix()
,例如

solve(t(data.matrix(nfl_data)))

但无论哪种方式,都不需要手动从数据帧中取出每一行向量,按行绑定,然后转置。

执行str(a)
时的信息位如下:

> str(a)
List of 1024
....
换句话说,
a
是一个列表,而不是一个矩阵。错误消息
'a'中的“numeric”限定符必须是数字矩阵
用于在用户尝试反转其他类型的矩阵(逻辑和字符)时阻止人们抱怨。在您的情况下,错误消息的意思是:“您没有给我一个任何排序的矩阵”

解决此问题的最简单方法就是转置数据帧:

solve(t(nfl_data))
其中,使用
t()
将通过
as.matrix()
强制功能将
nfl\U数据
数据帧转换为矩阵。为了更加明确,如果您的数据可能包含因子,那么您可能希望通过
data.matrix()
,例如

solve(t(data.matrix(nfl_data)))

但是无论哪种方式,都不需要手动从数据框中取出每一行向量,按行绑定然后转置。

请发布
str(nfl\U数据)
str(a)
…惊人!也许我错过了什么!你一行一行地获取nfl_数据,然后一行一行地重新定位,以计算转置。请发布
str(nfl_数据)
str(a)
的结果……太棒了!也许我错过了什么!你一行一行地获取nfl_数据,然后一行一行地重新定位,以计算转置。