如何解决获取错误“'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 举报,一经查实,本站将立刻删除。