首页 > 解决方案 > 如何修复在 R 中声明的 Object(...) not found

问题描述

我正在尝试对双和函数求导。我遇到了这个错误:

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)

提前致谢!

标签: rloops

解决方案


这是我的代码:

# 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. 赋值NN=10
  2. 正确的作业形式L_D_gradL_D_grad <- numeric(N)

推荐阅读