我想从外部数据文件中初始化一些变量。一种方法是设置类似以下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}}
似乎无效。
答案 0 :(得分:1)
使用attach
和detach
的命名变体:
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启发