Переработка массива длины 1 в арифметике массива-вектора не рекомендуется.Оптимизация суммы квадратов ошибок - PullRequest
0 голосов
/ 27 апреля 2019

Мне нужно найти оптимальный вес (а), чтобы минимизировать сумму квадратов ошибок.Я использую это в качестве примера, так как у меня будет более сложная проблема, над которой нужно работать, и которая требует использования некоторых других пакетов оптимизации, кроме lm.Я получаю warnings (), говоря, что «В * y. Переработка массива длины 1 в арифметике массива-вектора устарела. Вместо этого используйте c () или as.vector ()».Я пробовал as.vector (a * y), a [1] * y, a * as.vector (y), но ничего не работает.

Что мне сделать, чтобы избавиться от этого сообщения?

install.packages("NlcOptim")
library(NlcOptim)

x <- c(1:4)
y <- c(2,4,6,8)

objfun <- function(a) {
  return(sum((x-a*y)^2))
}
x0 <- 1
solnl(x0,objfun = objfun)

Вот сообщение об ошибке, которое я вижу после ввода warnings():

1: In a * y :
  Recycling array of length 1 in array-vector arithmetic is deprecated.
  Use c() or as.vector() instead.

1 Ответ

0 голосов
/ 27 апреля 2019

На самом деле я бы предложил ничего не делать. R просто не любит добавлять одномерные массивы к числовым векторам.

x <- array(1, dim = 1);
x + c(1,1)

[1] 2 2

Warning message:
In x + c(1, 1) :
  Recycling array of length 1 in array-vector arithmetic is deprecated.
  Use c() or as.vector() instead.

Как видите, результат верный, поэтому вы вполне можете проигнорировать это предупреждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...