Как исправить объект (...) не найден, пока он объявлен в R - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь взять производную от функции двойной суммы.Я сталкиваюсь с этой ошибкой:

Error in deriv.f.1(X = X.data, y = y.vec, alpha = alpha.vector[1, ]) : 
  object 'L_D_grad' not found

Я попытался переместить скобки {}, дважды проверьте, не пропустил ли я закрывающую / открывающую скобку, если у меня есть дополнительная открывающая / закрывающая скобка.Тем не менее, ошибка по-прежнему существует.

# Generate Sample Data
gen.sample <- function(n){
  x <- rnorm(n,5,10)
  y <- ifelse(x < 2.843,1,-1)
  return(data.frame(x,y))
}
##
deriv.f.1 <- function(X,y,alpha){
  N <- length(X)
  L_D_grad < numeric(N)
  xy.alpha.sum <- numeric(N)
  for(k in 1:N){
    for(l in 1:N){
      if(l == k){
        xy.alpha.sum[l] = 0}  
      else{
        xy.alpha.sum[l] <- alpha[l]*y[k]*y[l]*X[k]*X[l]}
      }
  L_D_grad[k] <- 1 - sum(xy.alpha.sum) - alpha[k]*(y[k])^2*(X[k])^2
  }
  return(L_D_grad)
}
## Illustration

set.seed(4997)
options(digits = 4,scipen = -4)
sample.data <- gen.sample(n=N)
X.data <- sample.data$x
y.vec <- sample.data$y

alpha.vector <- matrix(rep(seq(from=-5,to = 5, length.out = N),N*N),
                       ncol = N, nrow = N, byrow = TRUE)
alpha_vec <- alpha.vector[1,]
deriv.f.1(X = X.data, y = y.vec, alpha =  alpha_vec)

Заранее спасибо!

1 Ответ

0 голосов
/ 27 марта 2019

Вот мой код:

# Generate Sample Data
gen.sample <- function(n){
  x <- rnorm(n,5,10)
  y <- ifelse(x < 2.843,1,-1)
  return(data.frame(x,y))
}
##
deriv.f.1 <- function(X,y,alpha){
  N <- length(X)
  L_D_grad <- numeric(N)
  xy.alpha.sum <- numeric(N)
  for(k in 1:N){
    for(l in 1:N){
      if(l == k){
        xy.alpha.sum[l] = 0}  
      else{
        xy.alpha.sum[l] <- alpha[l]*y[k]*y[l]*X[k]*X[l]}
    }
    L_D_grad[k] <- 1 - sum(xy.alpha.sum) - alpha[k]*(y[k])^2*(X[k])^2
  }
  return(L_D_grad)
}
## Illustration

set.seed(4997)
options(digits = 4,scipen = -4)
N=10
sample.data <- gen.sample(n=N)
X.data <- sample.data$x
y.vec <- sample.data$y

alpha.vector <- matrix(rep(seq(from=-5,to = 5, length.out = N),N*N),
                       ncol = N, nrow = N, byrow = TRUE)
alpha_vec <- alpha.vector[1,]
deriv.f.1(X = X.data, y = y.vec, alpha =  alpha_vec)

Где:

#sample.data
#x  y
#1  -5.303e+00  1
#2   1.493e+01 -1
#3   9.797e+00 -1
#4   1.991e+01 -1
#5  -1.454e+01  1
#6   1.423e+01 -1
#7   1.025e+01 -1
#8   5.455e+00 -1
#9   3.719e+00 -1
#10  2.021e+01 -1

И deriv.f.1(X = X.data, y = y.vec, alpha = alpha_vec)

# -1.271e+01 -3.759e+01 -2.432e+01 -5.046e+01 -3.659e+01 -3.577e+01 -2.548e+01 -1.310e+01
# -8.612e+00 -5.123e+01

Я внес два изменения:

  1. Назначить N значение: N=10
  2. Форма правильного назначения L_D_grad: L_D_grad <- numeric(N)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...