【发布时间】:2023-03-13 03:08:01
【问题描述】:
我正在处理一些带有 for 循环的简单 R 代码。 我的代码的主要目标是使用 for 循环计算给定数据集(矩阵)的卡方值
我有 2 个尺寸为 5*15 的矩阵(B 和 d) 下图分别为矩阵B、矩阵d。
free<-matrix(NA,nrow=15,ncol=5)
for(i in 1:5){
for(j in 1:15){
free[i,j]<-chisq(i,j)
}
}
chisq <-function(i,j){
pchisq(B[i,j],df=d[i,j],lower.tail=FALSE)
}
矩阵 B:
矩阵d:
最后,代码结果的错误是
Non-numeric argument to mathematical function.
您能帮我找出问题所在吗?
很高兴知道如何解决它。
在你的帮助下,我这样编辑了我的代码
B<-as.matrix(B)
d<-as.matrix(d)
free<-matrix(NA,nrow=15,ncol=5)
chisq <-function(i,j){
pchisq(B[i,j],df=d[i,j],lower.tail=FALSE)
}
for(i in 1:5){
for(j in 1:15){
free[i,j]<-chisq(i,j)
}
}
那么错误信息就是
Error in B[i, j] : subscript out of bounds
在评论之后发布 dput(d) 和 dput(B) 我有这个!
输入(d) 结构(c(12, 23, 18, 14, 12, 20, 12, 15, 17, 16, 24, 19, 14, 13, 16, 12, 22, 16, 13, 12, 17, 12, 13, 17, 13, 23, 17, 13, 13, 12, 11, 22, 15, 13, 12, 16, 12, 13, 15, 13, 23, 16, 11, 12, 11, 11, 22, 14, 13, 12, 16, 12, 12, 14, 11, 22, 14, 11, 12, 10, 11, 22, 14, 13, 11, 16, 10, 12, 14, 11, 21, 14, 10, 10, 10), .Dim = c(15L, 5L), .Dimnames = list(NULL, c("D1", "D2", "D3", "D4", "D5"))) 输出(B) 结构(c(63.4359、161.77、104.931、42.9404、18.3315、51.2222、 22.0478、72.04、89.8262、45.0258、137.835、74.5486、65661.7、 51.2519、57.2574、63.4359、135.564、96.5449、42.7049、18.3315、 47.9553、22.0478、65.6375、89.8262、26.9698、121.79、69.53、66.8152、 51.2519、52.6687、61.041、135.564、95.4561、42.7049、18.3315、 42.9336、22.0478、65.6375、88.567、26.9698、121.79、67.9544、 65.0612、49.9536、52.0815、61.041、135.564、95.138、42.7049、 18.3315、42.9336、22.0478、65.3476、88.567、22.2159、119.689、 41.1733、65.0612、49.9536、51.6908、61.041、135.564、95.138、 42.7049、16.0557、42.9336、20.369、65.3476、88.567、22.2159、 118.65, 41.1733, 59.8942, 39.9696, 51.6908), .Dim = c(15L, 5L ), .Dimnames = list(NULL, c("B1", "B2", "B3", "B4", "B5")))
【问题讨论】:
-
欢迎来到 SO!确保您的矩阵实际上是数字的。检查数字是否由于某种导入原因不是字符类。
-
感谢您的评论!但如您所见,矩阵 B 中的元素类别是双精度的,而 d 是整数。他们是错误的原因吗?
-
很难说,没有一个工作的例子。
chisq的定义遵循它的用途。这很奇怪。你确定,你的命名空间中的函数chisq是你向我们展示的那个吗?free是如何初始化的?不要用View检查变量的类型,使用str。再说一遍:请写一个可重现的例子。 -
感谢您的评论@Bernhard chisq 是我自己的函数,free 被定义为 free
-
您的尺寸好像换了?
B[i,j]尝试从第 i 个 row 和第 j 个 column 中选择元素?