啊啊啊啊啊吖

2019-03-15   阅读量: 1059

数据分析师 R语言

函数在增加数据大小时产生NA

扫码加入数据分析学习群

我在R中实现我的功能并尝试结果以确定它是否是我期望的。我想要评估的功能是:

在此输入图像描述

该功能正常工作,直到我增加数据矩阵的大小(例如,它适用于N = 10但不是N = 12时,下面会发布一个示例。)

我确定是否与我的实现或溢出问题有关。

# Generate Sample Data
gen.sample <-
function(n){
x <- runif(n,min =
-5,max = 5)
y <- ifelse(x <
0,-1,1)
return(data.frame(x,y))
}

# Objective function L_D
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)
}

# L_D works when N = 10
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(c(
-5,-4,-3,-2,-1,0,1,2,3,4,5),11*N),ncol = 11, 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,]))
}

# It produces all NA when N = 12

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(
-5,-4,-3,-2,-1,0,1,2,3,4,5),11*N),ncol = 11, 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,]))
}
[
1] NA
[
1] NA
[
1] NA
[
1] NA
[
1] NA
[
1] NA
[
1] NA
[
1] NA
[
1] NA
[
1] NA
[
1] NA
[
1] NA

出了什么问题?我没有看到这个问题。

解决办法:问题出现在这个循环中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的向量。我粘贴的循环尝试访问alpha[i]时i=N,这NA是因为没有第12个元素alpha

(2)注意当你逐步执行双循环时会发生什么:当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]所有k,但这次NA是因为你执行涉及计算alpha[i]和alpha[k]其中,在上述(1),都是的“外部”刚才解释alpha。因此,所有的inner.product都充满了NA。

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
0.1254 1 2 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子