首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中两个值的比较

R中两个值的比较
EN

Stack Overflow用户
提问于 2014-12-17 14:18:24
回答 1查看 2K关注 0票数 1

我正在检查矩阵的输入在R中是倒数的,即一边的值=1/值。

到目前为止..。

代码语言:javascript
复制
    AHP <- function(pairwisematrix){

    ## check the input data

    if (!((is.matrix(pairwisematrix) || (is.data.frame(pairwisematrix))))) 
            stop("pairwise matrix must be a matrix or a data frame")

    if (!(nrow(pairwisematrix) == ncol(pairwisematrix))) 
      stop("pairwise matrix must be a square matrix or a data frame")

    for (i in 1:nrow(pairwisematrix))   {
    for (j in 1:ncol(pairwisematrix))       {
        if (i == j) {   if (pairwisematrix[i,j] != 1)                                                                       {   stop("the central values in the reciprocal matrix must be 1.")                              }}
        else { if ((pairwisematrix[i,j] == 1 / pairwisematrix[j,i]) || (pairwisematrix[j,i] == 1 / pairwisematrix[i,j]))))  {   stop("the pairwise matrix must be reciprocal (i.e. value on one side must = 1/value)")     }}
                                            }
                                        }


  out <- "all worked"

    return(out)
}

但当我测试:

代码语言:javascript
复制
check1 <- matrix(c(1,1/3,5,3,1,0.2,0.2,5,1),3,3,byrow=T)
test <- AHP(check1)

我知道错误:

成对矩阵必须是倒数的(即一边的值必须=1/值) 0.333333 &0.333333。

我尝试将值转换为字符串、部分字符串,并尝试相同(a、b ),但没有成功。

有人有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-17 15:07:35

由于有许多if在双for loop中,如果它按预期工作,我会感到惊讶。R是为处理矩阵而设计的,因此您可以编写如下

代码语言:javascript
复制
AHP <- function(pairwisematrix){
  if(!all(pairwisematrix == t(1/pairwisematrix)))
    stop("the pairwise matrix must be reciprocal (i.e. value on one side must = 1/value)")
  else
    return("all worked")
}

AHP(check1)
#[1] "all worked"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27527636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档