过滤器函数因缺少数据参数而不断失败
filter functions keeps failing with missing data argument
我正在研究营销组合建模,并且正在关注这篇文章
https://analyticsartist.wordpress.com/2014/01/31/adstock-rate-deriving-with-analytical-methods/
文章对adstock函数的定义如下:
adstock <- function(x, rate=0){
return(as.numeric(filter(x=x, filter=rate, method="recursive")))
}
并进一步使用 R 中 minpack.lm
包中的 nlsm
来计算比率和系数。
model1 <- nlsLM(Applications~b0 + b1 * adstock(Media1, r1) + b2 * adstock(Media2, r2) +
b3 * adstock(Media3, r3) + b4 * adstock(Media4, r4) + b5 * adstock(Media5, r5) +
b6 * adstock(Media6, r6) + b7 * adstock(Media7, r7),
algorithm = "LM",
start = c(b0= 1, b1= 1, b2= 1, b3 = 1, b4 = 1, b5 =1, b6= 1, b7= 1, r1=0, r2=0, r3=0, r4=0, r5=0, r6=0, r7=0),
lower = c(b0=-Inf, b1=-Inf, b2=-Inf, b3 = -Inf, b4 = -Inf, b5 =-Inf, b6= -Inf, b7= -Inf, r1=0, r2=0, r3=0, r4=0, r5=0, r6=0, r7=0),
upper = c(b0= Inf, b1= Inf, b2= Inf, b3 = Inf, b4 = Inf, b5 =Inf, b6= Inf, b7= Inf, r1=0.5, r2=0.5, r3=0.5, r4=0.5, r5=0.5, r6=0.5, r7=0.5))
但是,模型一直失败并出现以下错误
Error in filter_(.data, .dots = compat_as_lazy_dots(...)) :
argument ".data" is missing, with no default
似乎错误来自 adstock 函数,但我不确定如何修复它。
我真的很希望有人能帮助解决这个问题。
提前致谢!!
(这是一个常见问题,但由于我找不到重复的问题,所以我现在会提供一个答案。)
您在此处看到的错误来自 dplyr::filter
,而不是您预期使用的错误:stats::filter
。当你加载 dplyr
:
时,你应该在某个时候看到类似下面的内容
library(dplyr)
# Attaching package: 'dplyr'
# The following objects are masked from 'package:stats':
# filter, lag
# The following objects are masked from 'package:base':
# intersect, setdiff, setequal, union
他们解决这个问题的方法(以及 encouraged/forced 将包发布到 CRAN 时)在使用非基本函数时是明确的。我通常认为 stats::
不会受到此影响,但使用 dplyr
肯定会强制执行它。
因此,您的代码的修复方法是在 dplyr
:
附近的任何地方使用 filter
时简单明了
adstock <- function(x, rate=0){
return(as.numeric(stats::filter(x=x, filter=rate, method="recursive")))
}
FWIW,R 的名称空间管理和与 python 更明确的方法的粗略等效:
R Python
---------------------- ----------------------
import pkgname | explicit namespace use
pkgname::function(...) pkgname.function(...) |
import pkgname as p | no R equivalent?
p.function(...) |
library(pkgname) import * from pkgname | permissive namespace,
function(...) function(...) | enables masking
我正在研究营销组合建模,并且正在关注这篇文章
https://analyticsartist.wordpress.com/2014/01/31/adstock-rate-deriving-with-analytical-methods/
文章对adstock函数的定义如下:
adstock <- function(x, rate=0){
return(as.numeric(filter(x=x, filter=rate, method="recursive")))
}
并进一步使用 R 中 minpack.lm
包中的 nlsm
来计算比率和系数。
model1 <- nlsLM(Applications~b0 + b1 * adstock(Media1, r1) + b2 * adstock(Media2, r2) +
b3 * adstock(Media3, r3) + b4 * adstock(Media4, r4) + b5 * adstock(Media5, r5) +
b6 * adstock(Media6, r6) + b7 * adstock(Media7, r7),
algorithm = "LM",
start = c(b0= 1, b1= 1, b2= 1, b3 = 1, b4 = 1, b5 =1, b6= 1, b7= 1, r1=0, r2=0, r3=0, r4=0, r5=0, r6=0, r7=0),
lower = c(b0=-Inf, b1=-Inf, b2=-Inf, b3 = -Inf, b4 = -Inf, b5 =-Inf, b6= -Inf, b7= -Inf, r1=0, r2=0, r3=0, r4=0, r5=0, r6=0, r7=0),
upper = c(b0= Inf, b1= Inf, b2= Inf, b3 = Inf, b4 = Inf, b5 =Inf, b6= Inf, b7= Inf, r1=0.5, r2=0.5, r3=0.5, r4=0.5, r5=0.5, r6=0.5, r7=0.5))
但是,模型一直失败并出现以下错误
Error in filter_(.data, .dots = compat_as_lazy_dots(...)) :
argument ".data" is missing, with no default
似乎错误来自 adstock 函数,但我不确定如何修复它。
我真的很希望有人能帮助解决这个问题。
提前致谢!!
(这是一个常见问题,但由于我找不到重复的问题,所以我现在会提供一个答案。)
您在此处看到的错误来自 dplyr::filter
,而不是您预期使用的错误:stats::filter
。当你加载 dplyr
:
library(dplyr)
# Attaching package: 'dplyr'
# The following objects are masked from 'package:stats':
# filter, lag
# The following objects are masked from 'package:base':
# intersect, setdiff, setequal, union
他们解决这个问题的方法(以及 encouraged/forced 将包发布到 CRAN 时)在使用非基本函数时是明确的。我通常认为 stats::
不会受到此影响,但使用 dplyr
肯定会强制执行它。
因此,您的代码的修复方法是在 dplyr
:
filter
时简单明了
adstock <- function(x, rate=0){
return(as.numeric(stats::filter(x=x, filter=rate, method="recursive")))
}
FWIW,R 的名称空间管理和与 python 更明确的方法的粗略等效:
R Python
---------------------- ----------------------
import pkgname | explicit namespace use
pkgname::function(...) pkgname.function(...) |
import pkgname as p | no R equivalent?
p.function(...) |
library(pkgname) import * from pkgname | permissive namespace,
function(...) function(...) | enables masking