【问题标题】:problem with R 'data' must be of a vector type, was 'NULL'R 'data' 的问题必须是向量类型,是 'NULL'
【发布时间】:2018-10-16 22:59:43
【问题描述】:

我已经创建了这个函数:

vlw=function(x,y)
{
for(i in 0:20){
if((i>=1)&(i<=4)|(i>=6)&(i<=9)|(i>=11)&(i<=14)|(i>=16)&(i<=19))
{
  next()
}
print(ifelse((x<i)&(y<i)|(x>(i+5))&(y>(i+5)),0,ifelse((x<i)&(y<(i+5)),(y-i)/5,ifelse((x<(i+5))&(y>(i+5)),(i+5-x)/5,ifelse((x>i)&(y<(i+5)),(y-x)/5,1)))))
  }
}

如果我使用这个输入:

iv=c(-1,-2,4,9,10,5,-1)
fv=c(3,-1,6,10,11,10,8)

我的结果是:

[1] 0.6 0.0 0.2 0.0 0.0 1.0 1.2
[1] 0.0 0.0 0.2 1.0 1.0 1.0 0.6
[1] 0 0 0 0 1 0 0
[1] 0 0 0 0 0 0 0
[1] 0 0 0 0 0 0 0

问题是我想根据这个结果创建一个矩阵,但是当我输入:

exp4=as.matrix(vlw(iv,fv),5,7)

我读到了这个错误:

数组中的错误(x, c(length(x), 1L), if (!is.null(names(x))) list(names(x), : 'data' 必须是向量类型,为 'NULL

你知道我该如何解决吗?

【问题讨论】:

    标签: r function null


    【解决方案1】:

    这是一个更简单的示例,可以更清楚地解释该问题:

    f = function() {
      for (i in 1:2) {
        if (i==2) next()
        print (i)
      }
    }
    
    x = f()
    # [1] 1
    
    x
    # NULL
    

    本质上,该函数将返回上次评估的任何表达式。在这种情况下next()next 返回的值为NULL。因此,当您分配f() 的结果时,它的值将是NULL

    与其在函数中使用print,不如使用正在打印的值填充向量,然后返回该向量。

    像这样:

    vlw=function(x,y)
    {
      output=c()
      for(i in 0:20) {
        if((i>=1)&(i<=4)|(i>=6)&(i<=9)|(i>=11)&(i<=14)|(i>=16)&(i<=19))
        {
          next()
        }
        output =c(output,
          ifelse((x<i)&(y<i)|(x>(i+5))&(y>(i+5)),0,ifelse((x<i)&(y<(i+5)),(y-i)/5,ifelse((x<(i+5))&(y>(i+5)),(i+5-x)/5,ifelse((x>i)&(y<(i+5)),(y-x)/5,1))))
          )
      }
      return(output)
    }
    
    
    exp4 = matrix(vlw(iv,fv),5,7)
    #     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
    #[1,]  0.6  1.0  1.0    0    0    0    0
    #[2,]  0.0  1.2  1.0    0    0    0    0
    #[3,]  0.2  0.0  1.0    0    0    0    0
    #[4,]  0.0  0.0  0.6    1    0    0    0
    #[5,]  0.0  0.2  0.0    0    0    0    0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-20
      • 2017-05-06
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      相关资源
      最近更新 更多