微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取错误“'to' must be a finite number” 为 adstock 绘制函数 编辑:

如何解决获取错误“'to' must be a finite number” 为 adstock 绘制函数 编辑:

请在下面查看我的 Rcode 和数据

channelName = as.character(myData$TV_total[1])
maxX = 1.05*max(myData$TV_total)
maxY = 1.05*max(myData$Total)



myPlotDataDF = data.frame(Return = myData$Total,Spend = myData$TV_total)


simpleScatterPlot <- ggplot(myPlotDataDF,aes(x = Spend,y = Return)) +
  geom_point(color="black") +
  theme(panel.background = element_rect(fill = 'grey85'),panel.grid.major = element_line(colour = "white")) +
  coord_cartesian(ylim = c(0,maxY),xlim = c(0,maxX)) +
  scale_x_continuous(labels = dollar) +
  scale_y_continuous(labels = comma) + 
  ggtitle(paste(channelName))

simpleScatterPlot 

girafe(ggobj = simpleScatterPlot)


Ufun<-function(x,Spend,Return) {
  predictedReturn = x[2] + (x[1] - x[2])*((Spend^x[3])/(x[4] + (Spend^x[3])))
  errorSq = (predictedReturn - Return)^2
  sumSqError = sum(errorSq)
  return(sumSqError)
}


startValVec = c(25000,100,1.5,100000)
minValVec = c(0,1.01,1)
maxValVec = c(500000,500000,2,100000)


optim.parms<-nlminb(objective=Ufun,start=startValVec,lower=minValVec,upper=maxValVec,control=list(iter.max=100000,eval.max=2000),Spend = myData$Spend,Return = myData$Return)

optim.parms

a = optim.parms$par[1]
b = optim.parms$par[2]
c = optim.parms$par[3]
d = optim.parms$par[4]

curveDFx = seq(from=0,to=max(myData$Spend)*2,length.out=10000)
curveDFy = b+(a-b)*((curveDFx^c)/(d+(curveDFx^c)))
curveDF = data.frame(Spend = curveDFx,Return = curveDFy)

然后抛出错误

seq.default(from = 1,to = max(myData$Spend) * 2,length.out = 10000) 中的错误: 'to' 必须是一个有限数 另外: 警告信息: 在 max(myData$Spend) 中:没有非缺失的 max 参数;返回 -Inf

解决方法

仅查看您的错误消息(无法访问数据),您似乎在 NA 中有 myData$Spend 或缺失值。如果是这种情况,那么 max(...) 将返回 NA 而不是最大值。举个例子:

> x <- c(1:10,30,515,2:18)
> max(x)

[1] 515

如果我们将 NA 值添加到向量中,我们将得到 NA

> y <- c(1:10,2:18,NA)
> max(y)

[1] NA

如果您可以通过设置 max() 来告诉 na.rm = TRUE 忽略任何缺失的值,并且它会起作用:

> max(y,na.rm=TRUE)

[1] 515

所以,我猜设置 na.rm=TRUE 应该可以解决您在这一行中的问题:

curveDFx = seq(from=0,to=max(myData$Spend,na.rm=TRUE)*2,length.out=10000)

编辑:

刚刚注意到 OP 的错误消息是 Error inn max(myData$Spend) : no non-missing arguments to max; returning -Inf。当您引用的向量长度为​​零时,将返回 -Inf 。换句话说,一个空向量。这意味着这里可能的解释是您正在引用数据框中不存在的列。可能是拼写错误或拼写错误最有可能导致此错误。

示例:

> df <- data.frame(x=1:10,y=1:10)
[1] 10
> max(df$Y)
[1] -Inf
Warning message:
In max(df$Y) : no non-missing arguments to max; returning -Inf

在这种情况下,我猜 Spend 不包括在 myData 中命名的列中。也许是打字错误?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。