проблема с R 'data' должна быть векторного типа, была 'NULL' - PullRequest
0 голосов
/ 17 октября 2018

Я создал эту функцию:

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 (длина (x),1L), если (! Is.null (names (x))) list (names (x),: 'data' должен иметь векторный тип, был 'NULL

Знаете ли вы, как я могу решитьэто?

1 Ответ

0 голосов
/ 17 октября 2018

Вот более простой пример, который объясняет проблему более четко:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...