我正在R中实现我的函数,并尝试得出结果以确定它是否是我期望的结果。我要评估的功能是:
该函数在我增加数据矩阵的大小之前一直有效(例如,它适用于N = 10,但不适用于N = 12,下面将举一个示例)。
我确定我的实现与溢出问题有关。
SELECT t1.c1, t2.c2
FROM unnest ('{1, 2, 3, 4}'::int[]
, '{3, 2, 4, 1}'::int[]) WITH ORDINALITY i(id1, id2, ord)
LEFT JOIN tbl1 t1 ON t1.id = i.id1
LEFT JOIN tbl2 t2 ON t2.id = i.id2
ORDER BY ord;
出了什么问题?我看不到问题。
任何帮助都会很棒!
答案 0 :(得分:1)
问题出在obj_fun
的此循环中,涉及到alpha
使用的内容:
for(i in 1:N){
for(k in 1:N){
inner.product[k] <- alpha[i]*alpha[k]*...
}
}
两件事:
(1)设置了N=12
,但您调用了obj_fun(..., alpha=alpha.vector[i,])
,其中alpha.vector[i,]
是长度为11的向量。我在上面粘贴的循环尝试在{{ 1}},即alpha[i]
是因为i=N
中没有第12个元素
(2)请注意,当您执行双循环时会发生什么:当NA
和alpha
时,您将一个值分配给i=1
。然后k=1
和inner.product[1]
,然后为i=1
分配一个值。直到k=2
更改为inner.product[2]
为止,这是好的。当i
和i=2
时,您可以通过为其分配新值来覆盖i=2
。这种情况一直持续到k=1
和inner.product[1]
,此时您为所有i=N
覆盖了k=N
,但是这次是inner.product[k]
,因为您执行了涉及{{ 1}}和k
都在NA
的“外部”,正如上面(1)所述。因此,所有alpha[i]
都充满了alpha[k]
。
编辑:根据您添加到问题中的数学方程式,以及您对alpha
,inner.product
和NA
都是长度为n的向量的表示,我相信此函数会做你想要的:
alpha
答案 1 :(得分:0)
尝试一下:
set.seed(4997)
options(digits = 4,scipen = -4)
N = 12
sample.data <- gen.sample(n=N)
X.data <- sample.data$x
y.vec <- sample.data$y
alpha.vector <- matrix(rep(c(-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6),13*N),ncol = 13, nrow = N, byrow = TRUE)
for(j in 1:N){
alpha.vector[j,2] <- rnorm(1,5,5)
}
for(i in 1:N){
print(obj_fun(X = X.data, y = y.vec, alpha = alpha.vector[i,]))
}
问题在这里:
obj_fun <- function(X,y,alpha){
N <- length(X)
inner.product <- numeric(N)
for(i in 1:N){
for(k in 1:N){
inner.product[k] <- alpha[i]*alpha[k]*
y[i]*y[k]*(t(as.numeric(X[i]))%*%as.numeric(X[k]))
}
}
L_D <- sum(alpha) - 0.5*sum(inner.product)
return(L_D)
}
此功能从1循环到12,但是alpha
没有元素12
或11
!
顺便说一句:通过使用apply
系列和其他更改,可以改进这种循环执行代码的方式!