从附着的物体上有效地清洁R.

时间:2013-10-13 22:29:24

标签: r

我想从外部数据文件中初始化一些变量。一种方法是设置类似以下foo.csv的文件:

var1,var2,var3
value1,value2,value3

然后发出:

attach(read.csv('foo.csv'))

问题在于,var1, var2, var3 ls()不会显示rm(all=ls()),而var1, var2, var3大部分detach(pos=2) 都不会全部清除,detach() 仍然存在。

由于新对象的默认位置为“2”,我可以通过以下方式删除此变量所在的工作区:

pos=2

或只是

detach

由于detach()也是detach的默认值。

但是rm(all=ls())“太强大”,它可以删除默认加载的R对象。这意味着,如果附加了许多数据集,则使用重复的var1, var2, var3删除它们可能会导致删除默认的R对象,您必须重新启动它。除了单attach(read.csv('foo.csv'), pos=1) 的简单性消失之外。

一种解决方案是将attach(read.csv('foo.csv'), pos=-1) 直接附加到全球环境中。

你知道怎么做吗?

{{1}}

发出警告(未来错误)。

{{1}}

似乎无效。

3 个答案:

答案 0 :(得分:1)

使用attachdetach的命名变体:

attach(read.csv(text='var1,var2,var3\nvalue1,value2,value3'),
       name = 'some_name')

detach('some_name')

这可以防止错误。你显然将这两个包装成函数并以适当的方式自动生成名称(最简单的方法是通过单调增加的计数器)。

答案 1 :(得分:1)

如果要直接将变量读入全局环境,可以执行以下操作:

{
  foo<-read.csv('foo.csv')
  for(n in names(foo)) assign(n,foo[[n]],globalenv())
}

大括号将阻止foo也被添加到全局环境中。如果需要,您也可以将其转换为函数。

答案 2 :(得分:1)

“更安全”attach怎么样?

attach<-function(x) {for(n in names(x)) assign(n,x[[n]],globalenv()); names(x)} 

'更安全'意味着您可以使用ls()查看附加的变量,并且最重要的是用一个rm(list=ls())

删除它们

mrip启发