【问题标题】:How to fix Object(...) not found while it is declared in R如何修复在 R 中声明时找不到 Object(...)
【发布时间】:2019-03-27 11:56:35
【问题描述】:

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

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)

提前致谢!

【问题讨论】:

    标签: r loops


    【解决方案1】:

    这是我的代码:

    # 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 &lt;- numeric(N)

    【讨论】:

    • 是的,您被分配了L_D_grad &lt; numeric(N)。您只需将&lt; 更改为&lt;-
    • 你知道自从我自己开始这个项目以来,我做了多少傻事?无数!谢谢兄弟!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2019-12-17
    • 2018-10-22
    • 1970-01-01
    • 2011-11-01
    • 2019-01-18
    相关资源
    最近更新 更多