R语言中 attach()与detach(),及with()的使用

attach(what, pos = 2L, name = deparse(substitute(what), backtick=FALSE),
       warn.conflicts = TRUE)

1.attach()是对what添加路径索引,避免重复输入what名称,参数解释如下:

  • what:数据框或列表;
  • pos=2L:添加的路径存储的位置,一般默认即可。在对多个数据添加索引时,此位置会变成3L,4L,5L...detach()撤销索引路径时,会撤销对应位置的索引储存,具体例子见后;
  • name:不懂,遇见需要的情况再补充;
  • backtick=FALSE:反引号,经过测试,该参数固定为FALSE不可调,再调用索引时会用到;
  • warn.conflicts:是否打印警告。

detach()是撤销attach()建立的路径索引,往往二者配套使用。

举例如下:

> class(data) #data为自己提供的数据
[1] "data.frame"
> colnames(data) #查看data列
 [1] "No."            "Component Name" "Mass Info"      "Retention Time"
 [5] "QCRSD"          "P-value"        "Fold change"    "A-1"           
 [9] "A-2"            "A-3"            "B-1"            "B-2"           
[13] "B-3"            "QC1"            "QC2"            "QC3"           
[17] "as.is"         
> attach(data)
The following objects are masked from data (pos = 3):

    A-1, A-2, A-3, as.is, B-1, B-2, B-3, Component Name, Fold change,
    Mass Info, No., P-value, QC1, QC2, QC3, QCRSD, Retention Time

The following objects are masked from data (pos = 4):

    A-1, A-2, A-3, as.is, B-1, B-2, B-3, Component Name, Fold change,
    Mass Info, No., P-value, QC1, QC2, QC3, QCRSD, Retention Time
>No. 
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26
> A-1
Error: object 'A' not found  #因为列名“A-1”不符合变量命名规则,此处可用check.names=T改变,会 
                             #改为A.1
> `A-1`   #用反引号辅助读取A-1列信息
 [1] 6.112652e+07 5.338550e+06 9.803146e+07 1.698537e+07 3.193722e+07 2.111517e+07
 [7] 7.825601e+06 2.726090e+07 1.062785e+07 1.018187e+08 1.051693e+07 1.336919e+07
[13] 5.948830e+04 2.090497e+06 5.882181e+06 4.733337e+07 5.974494e+05 2.444981e+07
[19] 8.283025e+03 2.215970e+04 7.372889e+05 5.948745e+05 2.102290e+07 9.133244e+06
[25] 3.996773e+07 4.434691e+05
> data$`A-1`  #与上述建立路径索引结果相同
 [1] 6.112652e+07 5.338550e+06 9.803146e+07 1.698537e+07 3.193722e+07 2.111517e+07
 [7] 7.825601e+06 2.726090e+07 1.062785e+07 1.018187e+08 1.051693e+07 1.336919e+07
[13] 5.948830e+04 2.090497e+06 5.882181e+06 4.733337e+07 5.974494e+05 2.444981e+07
[19] 8.283025e+03 2.215970e+04 7.372889e+05 5.948745e+05 2.102290e+07 9.133244e+06
[25] 3.996773e+07 4.434691e+05
> summary(QC1,`A-1`)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
     4149   1194476  12129322  21224523  30429375 104915075 
> summary(data$QC1,data$`A-1`)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
     4149   1194476  12129322  21224523  30429375 104915075
> summary(`A-1`,`Fold change`)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
     8283   1075591  10572393  21472932  26558125 101818722 
> summary(data$`Fold change`,data$`A-1`)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.633   1.256   1.444   1.433   1.590   2.649
> detach(data)
> No.  #如果发现还能出结果...那就多detach几次==
Error: object 'No.' not found

2.with()函数

with(data, expr, ...)  #data可以是an environment, a list, a data frame, or an integer as in 
                       #sys.call
within(data, expr, ...)     #data为列表或数据框
within(data, expr, keepAttrs = TRUE, ...)
  •  within()函数中data必须是列表或数据框,with()中data类型更广
  • 表达式,大括号{}之间的语句都只针对data执行,但如果大括号中只有一句的话,则省略大括号。
> with(data,{No.})  #No.符合变量命名标准,可直接查看
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16
[17] 17 18 19 20 21 22 23 24 25 26
> with(data,{A-1})   #A-1不符合变量命名标准,不可直接查看,需要用反引号调用
Error in eval(substitute(expr), data, enclos = parent.frame()) : 
  object 'A' not found
> with(data,{`A-1`})
 [1] 6.112652e+07 5.338550e+06 9.803146e+07
 [4] 1.698537e+07 3.193722e+07 2.111517e+07
 [7] 7.825601e+06 2.726090e+07 1.062785e+07
[10] 1.018187e+08 1.051693e+07 1.336919e+07
[13] 5.948830e+04 2.090497e+06 5.882181e+06
[16] 4.733337e+07 5.974494e+05 2.444981e+07
[19] 8.283025e+03 2.215970e+04 7.372889e+05
[22] 5.948745e+05 2.102290e+07 9.133244e+06
[25] 3.996773e+07 4.434691e+05
> `A-1`    #with函数中路径索引不能在外部调用,需要用<<- 赋值才可以
Error: object 'A-1' not found
> with(data,{a-1<<-`A-1`})  #a-1符合变量命名标准,需要用反引号建立变量名
Error in a - 1 <<- `A-1` : object 'a' not found
> with(data,{a<<-`A-1`})
> a
 [1] 6.112652e+07 5.338550e+06 9.803146e+07
 [4] 1.698537e+07 3.193722e+07 2.111517e+07
 [7] 7.825601e+06 2.726090e+07 1.062785e+07
[10] 1.018187e+08 1.051693e+07 1.336919e+07
[13] 5.948830e+04 2.090497e+06 5.882181e+06
[16] 4.733337e+07 5.974494e+05 2.444981e+07
[19] 8.283025e+03 2.215970e+04 7.372889e+05
[22] 5.948745e+05 2.102290e+07 9.133244e+06
[25] 3.996773e+07 4.434691e+05
> with(data,{`a-1` <<- `A-1`})  
> a-1
 [1] 6.112652e+07 5.338549e+06 9.803146e+07
 [4] 1.698537e+07 3.193722e+07 2.111517e+07
 [7] 7.825600e+06 2.726090e+07 1.062785e+07
[10] 1.018187e+08 1.051693e+07 1.336919e+07
[13] 5.948730e+04 2.090496e+06 5.882180e+06
[16] 4.733337e+07 5.974484e+05 2.444981e+07
[19] 8.282025e+03 2.215870e+04 7.372879e+05
[22] 5.948735e+05 2.102290e+07 9.133243e+06
[25] 3.996773e+07 4.434681e+05
> with(data,{plot(No.,`A-1`)})  #{}中可以进行复杂计算

 

 

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: attachdetach是R语言的两个函数,用于将数据框或其他对象添加到搜索路径或从搜索路径删除。 attach函数可以将一个数据框或其他对象添加到搜索路径,使得其的变量可以直接使用,而不需要使用$符号来引用。例如,如果有一个数据框df,可以使用attach(df)将其添加到搜索路径,然后直接使用变量名来引用其的变量。 detach函数则是将一个对象从搜索路径删除,以释放内存空间。例如,如果之前使用attach(df),可以使用detach(df)将其从搜索路径删除。 需要注意的是,使用attachdetach函数可能会导致变量名冲突或者不必要的内存占用,因此应该谨慎使用。建议使用$符号来引用变量,或者使用with函数来避免变量名冲突。 ### 回答2: 在R语言attach()和detach()函数用于临时添加或移除变量到R的搜索路径,以便在命令提示符下轻松访问和使用这些变量。 当使用attach()函数时,R搜索路径将添加attach()函数指定的数据框架或环境。这意味着该数据框架的变量可以通过名称访问,而无需使用数据框架名称作为前缀。这使得代码更具可读性和易用性。例如,attach(mtcars)将mtcars数据框架的所有列添加到当前搜索路径,使得可以使用mpg或cyl直接访问数据框架对应的变量。 然而,使用attach()函数也存在潜在的问题。因为变量现在可以直接访问,所以如果命令提示符下使用了相同名称的变量,那么可能会出现冲突(变量被覆盖或修改),从而导致代码错误或其他问题。此外,在后续代码,可能会不小心访问不再需要的变量,从而使代码混乱、可读性差,最终导致代码难以维护。 为了避免这些问题,可以使用detach()函数解除数据框架或环境的搜索路径,并将其变量从搜索路径删除。这样做可以确保在后续代码不再访问不需要的变量并避免出现不必要的冲突。 总之,attach()函数可以方便地添加变量到搜索路径,但也可能会导致代码问题。detach()函数可以在不再需要变量时删除它们,以确保代码的清晰性和可读性。因此,建议使用这些函数时要谨慎,并确保了解当前的搜索路径以及所要添加或删除的变量。 ### 回答3: 在R语言attach()和detach()函数是用来将数据框的变量添加到R环境,方便访问和操作。attach()函数可以将数据框的变量添加到R环境,并自动将变量名声明为环境的对象名,使得用户可以直接使用变量名进行操作。而detach()函数则是用来将已经添加的数据框从R环境删除。 使用 attach()函数时,需要注意以下几个问题: 1. 首先需要将数据框读入到R环境,例如使用read.csv()函数来读取一个CSV文件到R。 2. 通过attach()函数来将数据框添加到R环境。 3. 在使用数据框的变量时,需要使用数据框的名称作为前缀。例如,如果有一个名为mydata的数据框和变量名为age,那么在使用age时需要写成mydata$age。 4. 在使用attach()之后需要注意避免变量名称的冲突。 使用detach()函数时,需要注意以下几个问题: 1. 首先需要确定要detach()的数据框名称。 2. 在detach()之后需要重新使用数据框名称进行调用变量。 3. 避免detach()后将变量名用于其他变量。 总的来说,attach()和detach()函数在R语言是非常有用的工具,可以方便地操作数据框的变量,同时也可以减轻编程负担,提高编程效率。在使用这两个函数时需要注意细节问题,以避免出现错误和冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值