将变量粘贴到方括号内

时间:2020-10-29 09:29:07

标签: r function paste lm

我正在尝试创建一个函数,该函数创建多个线性模型,将标准错误聚类,然后将其作为列表返回。为此,我创建了这些功能。

Sq_Diag <- function(x){ 
sqrt(diag(x))
} 

#Function for clustering standard-errors on a list of lm-models  
Cl_SE <- function(Models, Cluster) {
Cov <- lapply(Models, cluster.vcov, cluster = Cluster )
SE <- lapply(Cov, Sq_Diag)
}

#Function for creating lm-models, based on a given X and a set of controls 
LM_Creater <- function(x, N_Lead, CV) {
Form <- as.formula(paste(paste(x, N_Lead, sep = "_"), "~",x, "+", paste(CV, collapse = "+")))

Model_Fit <- lm(Form, na.action = "na.exclude", data = df)
}

使用它们时,我只需lapply()到变量名向量即可。

Dep_Var <- c("Var1", "Var2", "Var3")
Cntrl_Var <- c("Var4", "Var5", "Var6")

通过此代码,一些变量被赋予了先导

df <- df %>%
group_by(id) %>%
mutate_at(3:14, list(lead_5 = dplyr::lead), 5)

#Returns  two lists, one with the models and one with the SE 
One_Mods <- lapply(Dep_Var, LM_Creater, N_Lead = "lead_1", CV = Cntrl_Var) 
CC_SE_One <- Cl_SE(One_Mods, dfb$id)

现在,我想对公式中的因变量运行log()。我已经尝试将其简单地添加到Dep_Var向量中,但这在N_Lead函数中与LM_Creater参数一起使用。我还尝试过更改功能,例如:

    LM_Creater <- function(x, N_Lead, CV) {
    Form <- as.formula(paste(paste(paste("log("x"+1)"), N_Lead, sep = "_"), "~",x, "+", paste(CV, 
    collapse = "+")))

    Model_Fit <- lm(Form, na.action = "na.exclude", data = df)
    }

但是,在该位置放入新的past()会使R尝试在字符变量(即因变量的名称)处评估函数。当然那会返回一个错误,指出不可能使用“ log(字符)”。

关于如何实现这一目标的任何线索吗?

0 个答案:

没有答案