#r #loops
#r #циклы
Вопрос:
Я пытаюсь получить производную от функции двойной суммы. Я сталкиваюсь с этой ошибкой:
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:
Вот мой код:
# 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
Я внес два изменения:
- Присвойте
N
значение:N=10
- Правильная форма назначения
L_D_grad
:L_D_grad <- numeric(N)
Комментарии:
1. Да, вам было назначено
L_D_grad < numeric(N)
. Вам просто нужно изменить<
для<-
2. Знаете ли вы, сколько глупостей я совершил с тех пор, как начал этот проект самостоятельно? Бесчисленное множество! Спасибо, брат!