创建使用现有字符向量命名R中对象的函数

创建使用现有字符向量命名R中对象的函数,r,R,我试图掌握R中的建筑功能。比如说,我有一个数据框或数据表 dummy <- df(y, x, a, b, who) dummy如果这不能解决问题,请提供一个。它使帮助你变得更容易 library(lmtest) outputs <- lapply(who, function(name) { ols.reg <- lm(y ~ x + a + b, data = dummy[dummy$who == name]) dw <- dwt

我试图掌握R中的建筑功能。比如说,我有一个数据框或数据表

dummy <- df(y, x, a, b, who)

dummy如果这不能解决问题,请提供一个。它使帮助你变得更容易

library(lmtest)
    outputs <- lapply(who, function(name) {
        ols.reg <- lm(y ~ x + a + b, data = dummy[dummy$who == name])
        dw <- dwtest(ols.reg)
        output <- paste(c("ols.reg","dw"), name, sep = "_")
        return(output)
    })
库(lmtest)

输出如果这不能解决问题,请提供一个解决方案。它使帮助你变得更容易

library(lmtest)
    outputs <- lapply(who, function(name) {
        ols.reg <- lm(y ~ x + a + b, data = dummy[dummy$who == name])
        dw <- dwtest(ols.reg)
        output <- paste(c("ols.reg","dw"), name, sep = "_")
        return(output)
    })
库(lmtest)
使用内置CO2数据集,假设我们希望分别回归每种类型的conc摄取量,则输出1)Map。请注意,这将按类型命名组件

Map(function(x) lm(uptake ~ conc, CO2, subset = Type == x), levels(CO2$Type))
给出这两个组件列表(魁北克和密西西比索加类型的每一级别一个组件)——在输出后继续

$Quebec

Call:
lm(formula = uptake ~ conc, data = CO2, subset = Type == x)

Coefficients:
(Intercept)         conc  
   23.50304      0.02308  


$Mississippi

Call:
lm(formula = uptake ~ conc, data = CO2, subset = Type == x)

Coefficients:
(Intercept)         conc  
   15.49754      0.01238  
2)Map/do.call我们可能不仅希望使用类型命名组件,还希望在输出的call:行中用实际类型替换x。在这种情况下,使用
do.call
调用
lm
,使用
quote
确保显示数据帧的名称而不是其值,并使用
bquote
执行x的替换

reg <- function(x) {
  do.call("lm", list(uptake ~ conc, quote(CO2), subset = bquote(Type == .(x))))
}
Map(reg, levels(CO2$Type))
3)lmListnlme软件包有lmList用于执行此操作:

library(nlme)
lmList(uptake ~ conc | Type, CO2, pool = FALSE)
给予:

$Quebec

Call:
lm(formula = uptake ~ conc, data = CO2, subset = Type == "Quebec")

Coefficients:
(Intercept)         conc  
   23.50304      0.02308  


$Mississippi

Call:
lm(formula = uptake ~ conc, data = CO2, subset = Type == "Mississippi")

Coefficients:
(Intercept)         conc  
   15.49754      0.01238  
Call:
  Model: uptake ~ conc | Type 
   Data: CO2 

Coefficients:
            (Intercept)       conc
Quebec         23.50304 0.02308005
Mississippi    15.49754 0.01238113
1)使用内置CO2数据集绘制地图假设我们希望分别回归每种类型的conc摄取量。请注意,这将按类型命名组件

Map(function(x) lm(uptake ~ conc, CO2, subset = Type == x), levels(CO2$Type))
给出这两个组件列表(魁北克和密西西比索加类型的每一级别一个组件)——在输出后继续

$Quebec

Call:
lm(formula = uptake ~ conc, data = CO2, subset = Type == x)

Coefficients:
(Intercept)         conc  
   23.50304      0.02308  


$Mississippi

Call:
lm(formula = uptake ~ conc, data = CO2, subset = Type == x)

Coefficients:
(Intercept)         conc  
   15.49754      0.01238  
2)Map/do.call我们可能不仅希望使用类型命名组件,还希望在输出的call:行中用实际类型替换x。在这种情况下,使用
do.call
调用
lm
,使用
quote
确保显示数据帧的名称而不是其值,并使用
bquote
执行x的替换

reg <- function(x) {
  do.call("lm", list(uptake ~ conc, quote(CO2), subset = bquote(Type == .(x))))
}
Map(reg, levels(CO2$Type))
3)lmListnlme软件包有lmList用于执行此操作:

library(nlme)
lmList(uptake ~ conc | Type, CO2, pool = FALSE)
给予:

$Quebec

Call:
lm(formula = uptake ~ conc, data = CO2, subset = Type == "Quebec")

Coefficients:
(Intercept)         conc  
   23.50304      0.02308  


$Mississippi

Call:
lm(formula = uptake ~ conc, data = CO2, subset = Type == "Mississippi")

Coefficients:
(Intercept)         conc  
   15.49754      0.01238  
Call:
  Model: uptake ~ conc | Type 
   Data: CO2 

Coefficients:
            (Intercept)       conc
Quebec         23.50304 0.02308005
Mississippi    15.49754 0.01238113

可能
?lappy
使用列表,而不是单个变量。查看有关为什么应该使用命名列表而不是自定义命名变量的讨论。请查看。可能
?lappy
使用列表,而不是单个变量。查看关于为什么应该使用命名列表而不是自定义命名变量的讨论。请查看。我非常喜欢这个解决方案,它很直观。如果我想根据“who”的每个值来命名列表中的两个元素(ols.reg,dw),您可以在返回前使用当前“who”值的名称将名称添加到列表中。我更新了解决方案。我非常喜欢这个解决方案,它很直观。如果我想根据“who”的每个值来命名列表中的两个元素(ols.reg,dw),您可以在返回前使用当前“who”值的名称将名称添加到列表中。我更新了解决方案。