0

请在下面查看我的 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,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

4

1 回答 1

0

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

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

[1] 515

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

> y <- c(1:10, 30, 515, 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它不包含在名为 in 的列中myData。也许是错字?

于 2021-04-14T15:40:26.667 回答