关于attach()和detach()的理解
这个,需了解全局变量和局域变量的概念。
当输入一个变量名时,R会在最上一级的路径中(一般是全局变量)搜索有没有这个变量,如没有,则给出出错信息,因为它没有在全局环境中搜索有这个变量。
数据框可以看成是一个封闭了其各列变量的局域环境,所以单输入一个数据框的列名,在全局环境中是搜不到这个列名的(因为被数据框这个封闭的局域环境阻隔了)。如要搜索到需要的列值,则要明确给出搜索路径,即dataframe$variable的形式。
但是每次都这样子给出完整路径很烦,所以为方便起见,需要用attach将数据框中的列变量释放为全局变量,这样在全局环境中就可以自由搜索了。但是这会带来另外一个问题,当全局环境中本来有一个同名的变量时,其会被新加入的数据框列变量屏蔽掉,造成意想不到的后果,所以在编程时一般不用attach,而是用with。至于detach,则是反向操作,又把封闭环境中的变量中从全局环境中释放掉,使其还原为局域变量状态。
attach一般须与detach对应。
————————————————————————————————————————————(以上转自博客,但是由于作者不详,如有冒犯,请私信)
————————————————————————————————————-————————
With函数
The with( ) function applys an expression to a dataset. It is similar to DATA= in SAS.
Example:
# with(data, expression)
# example applying a t-test to a data frame mydata
with(mydata, t.test(y ~ group))
By函数
The by( ) function applys a function to each level of a factor or factors. It is similar to BY processing in SAS.
Example:
# by(data, factorlist, function)
# example obtain variable means separately for
# each level of byvar in data frame mydata
by(mydata, mydata$byvar, function(x) mean(x))
——————————————————————————————————————-——
以上转载自Quick-R