【发布时间】:2020-08-09 00:56:05
【问题描述】:
我编写了一个函数,可以为数据框中的变量创建滞后转换。现在由于 dplyr 有软贬值 funs_ 参数,它警告我使用 list 代替 funs_。下面给出的是我的滞后转换函数,它工作正常,但我想使用更新的参数列表对其进行修改。
lagTransformation<- function(ds,n)
{
# this function creats lag transformation of dataframe
# args:
# ds : Dataset
# n : number of lags
require(dplyr)
lags <- seq(n)
lag_names <- paste("lag", formatC(lags, width = nchar(max(lags)), flag = "0"), sep = "")
lag_functions <- setNames(paste("dplyr::lag(., ", lags, ")"), lag_names)
ds <-ds %>% mutate_at(vars(names(ds)), funs_(lag_functions)) %>% select(contains("_lag"))
return(ds)
}
尝试将 funs_ 替换为 list 但出现错误
lagTransformation<- function(ds,n)
{
# this function creats lag transformation of dataframe
# args:
# ds : Dataset
# n : number of lags
require(dplyr)
lags <- seq(n)
lag_names <- paste("lag", formatC(lags, width = nchar(max(lags)), flag = "0"), sep = "")
lag_functions <- setNames(paste("dplyr::lag(., ", lags, ")"), lag_names)
ds <-ds %>% mutate_at(vars(names(ds)), list(~.lag_functions)) %>% select(contains("_lag"))
return(ds)
}
get(.x, .env, mode = "function") 中的错误: 找不到模式'function'的对象'dplyr::lag(., 1)'
提到了下面的问题,但无法纠正错误
Create new variables with mutate_at while keeping the original ones
我需要什么修改?
【问题讨论】:
-
paste("dplyr::lag(., ", lags, ")")除非你evalparse否则这是行不通的(eval(parse) 有它自己的缺点)。 -
也试过eval和parse,结果是一样的。