使用 R 控制台和 R 代码的结果将对象的名称生成到 R 脚本中

Using results from the R console and R code to generate the name of an object into R script

我对使用 R 控制台和 R 代码的结果将对象的名称生成到 R 脚本中很感兴趣。

我用 1 个 IV 创建了一个线性回归,其中 DV 是 mpg,感兴趣的 2 个 IV 是 cyldisp。我调用通用模型代码对象 lm_DVmpg。我使用代码 paste("lm_DVmpg","_IV", as.character(lm_DVmpg$call$formula[[3]]), sep = "") 为控制台中包含 lm() 的对象生成了一个唯一名称。然后我将结果粘贴到脚本中并将该文本用作 IV 特定回归对象的名称。

例如使用cyl的IV的对象名称为lm_DVmpg_IVcyldisp的对象名称为lm_DVmpg_IVdisp.

以下是来自控制台的一些示例代码:

> ## first lm
> # ---- NOTE: Iv is  cyl
> # ---- NOTE: creates lm() object
> lm_DVmpg <- lm(mpg~cyl, data = mtcars)
> # ---- NOTE: creates unique name for lm() object
> paste("lm_DVmpg","_IV", as.character(lm_DVmpg$call$formula[[3]]), sep = "")
[1] "lm_DVmpg_IVcyl"
> # ---- NOTE: moves lm_DVmpg to object unique to IV used
> lm_DVmpg_IVcyl <- lm_DVmpg

有没有办法使用 R 脚本文件中的 R 代码将 lm_DVmpg <- lm(mpg~cyl, data = mtcars) 行中 lm_DVmpg 代码的名称更改为 lm_DVmpg_IVcyl,派生自 paste("lm_DVmpg","_IV", as.character(lm_DVmpg$call$formula[[3]]), sep = "") 命令,使用 R 代码而无需 copy/paste 文本 lm_DVmpg_IVcyl 从控制台到适当的 R 脚本行?

或者,是否可以使用 R 代码将文本 lm_DVmpg_IVcyl 放入行 lm_DVmpg_IVcyl <- lm_DVmpg 中,而无需 copy/paste在 运行 代码 paste("lm_DVmpg","_IV", as.character(lm_DVmpg$call$formula[[3]]), sep = "")?

之后从控制台

如有任何帮助,我们将不胜感激。

仅供参考,我使用的是 2013 Macbook Pro,配备 2.4 GHz 双核英特尔芯片、8 GB 内存、macOS big sur 11.2.2、RStudio 版本 1.4.1106 和 R 基础包 4.04。

谢谢。



我使用的R脚本如下:

# Naming objects from returns on console
# ---- NOTE: will do several linear regressions using the mtcars dataset, with IV and the DV being "mpg"
# ---- NOTE: IVs - cyl, disp

## gives info on dataset
head(mtcars)
str(mtcars)
colnames(mtcars)

## first lm
# ---- NOTE: Iv is  cyl
# ---- NOTE: creates lm() object
lm_DVmpg <- lm(mpg~cyl, data = mtcars)
# ---- NOTE: creates unique name for lm() object
paste("lm_DVmpg","_IV", as.character(lm_DVmpg$call$formula[[3]]), sep = "")
# ---- NOTE: moves lm_DVmpg to object unique to IV used
lm_DVmpg_IVcyl <- lm_DVmpg

## second lm
# ---- NOTE: Iv is  disp
# ---- NOTE: creates lm() object
lm_DVmpg <- lm(mpg~disp, data = mtcars)
# ---- NOTE: creates unique name for lm() object
paste("lm_DVmpg","_IV", as.character(lm_DVmpg$call$formula[[3]]), sep = "")
# ---- NOTE: moves lm_DVmpg to object unique to IV used
lm_DVmpg_IVdisp <- lm_DVmpg

## displays summaries of regression objects
# ---- NOTE: latest regression object summary
summary(lm_DVmpg)
# ---- NOTE: unique regression objects
lm_DVmpg_IVmpg
lm_DVmpg_IVdisp
# ---- NOTE: lm_DVmpg = lm_DVmpg_IVdisp, since the lm_DVmpg_IVmpg object when IV == disp was the latest lm() to be run


这是我在 运行 R 脚本时从控制台得到的结果。

> # Naming objects from returns on console
> # ---- NOTE: will do several linear regressions using the mtcars dataset, with IV and the DV being "mpg"
> # ---- NOTE: IVs - cyl, disp
> # Naming objects from returns on console
> # ---- NOTE: will do several linear regressions using the mtcars dataset, with IV and the DV being "mpg"
> # ---- NOTE: IVs - cyl, disp
> 
> ## gives info on dataset
> head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
> str(mtcars)
'data.frame':   32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
> colnames(mtcars)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"
> 
> ## first lm
> # ---- NOTE: Iv is  cyl
> # ---- NOTE: creates lm() object
> lm_DVmpg <- lm(mpg~cyl, data = mtcars)
> # ---- NOTE: creates unique name for lm() object
> paste("lm_DVmpg","_IV", as.character(lm_DVmpg$call$formula[[3]]), sep = "")
[1] "lm_DVmpg_IVcyl"
> # ---- NOTE: moves lm_DVmpg to object unique to IV used
> lm_DVmpg_IVcyl <- lm_DVmpg
> 
> ## second lm
> # ---- NOTE: Iv is  disp
> # ---- NOTE: creates lm() object
> lm_DVmpg <- lm(mpg~disp, data = mtcars)
> # ---- NOTE: creates unique name for lm() object
> paste("lm_DVmpg","_IV", as.character(lm_DVmpg$call$formula[[3]]), sep = "")
[1] "lm_DVmpg_IVdisp"
> # ---- NOTE: moves lm_DVmpg to object unique to IV used
> lm_DVmpg_IVdisp <- lm_DVmpg
> 
> ## displays summaries of regression objects
> # ---- NOTE: latest regression object summary
> summary(lm_DVmpg)

Call:
lm(formula = mpg ~ disp, data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.8922 -2.2022 -0.9631  1.6272  7.2305 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 29.599855   1.229720  24.070  < 2e-16 ***
disp        -0.041215   0.004712  -8.747 9.38e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.251 on 30 degrees of freedom
Multiple R-squared:  0.7183,    Adjusted R-squared:  0.709 
F-statistic: 76.51 on 1 and 30 DF,  p-value: 9.38e-10

> # ---- NOTE: unique regression objects
> lm_DVmpg_IVmpg

Call:
lm(formula = mpg ~ cyl, data = mtcars)

Coefficients:
(Intercept)          cyl  
     37.885       -2.876  

> lm_DVmpg_IVdisp

Call:
lm(formula = mpg ~ disp, data = mtcars)

Coefficients:
(Intercept)         disp  
   29.59985     -0.04122  

> # ---- NOTE: lm_DVmpg = lm_DVmpg_IVdisp, since the lm_DVmpg_IVmpg object when IV == disp was the latest lm() to be run


我不确定你为什么需要这个,但我认为 assign + get 是你要找的。

lm_DVmpg <- lm(mpg~cyl, data = mtcars)
new_name <- paste("lm_DVmpg","_IV", as.character(lm_DVmpg$call$formula[[3]]), sep = "")
assign(new_name, lm(mpg~disp, data = mtcars))  
get(new_name)

#Call:
#lm(formula = mpg ~ disp, data = mtcars)

#Coefficients:
#(Intercept)         disp  
#   29.59985     -0.04122