1

我喜欢使用 R 函数,所以我的工作区积累了很多函数。

但是,“objects()”命令似乎返回了命名我的对象而不是对象本身的字符串。因此,当我有一个名为“barchart00”的函数时,它会显示在 objects() 命令中,如果我测试它的类型,它可以作为函数检测到,如下面的代码所示:

is.function(barchart00) [1] 真

> objects()
[1] "barchart00"  

> OL<-objects()
> OL
[1] "barchart00"  

> is.function(OL[1])
[1] FALSE

如果我只有一两个或三个功能,这将不是问题。但实际上我有几十个函数,还有几十个不是函数的对象,我想获得一个函数列表,它与 objects() 返回的对象列表一样方便。

我的第一个想法是,如果 objects() 返回一个实际对象的列表,我可以通过该列表并测试函数状态。但实际上,objects() 似乎返回的是我的对象名称的字符串列表,而不是对象本身。

任何建设性的建议将不胜感激。谢谢。

...Hong Ooi 回答了这个问题,但我无法再将其标记为已回答八小时。

lsf.str() 是我正在寻找的语法。

所有的功劳都应该归功于Hong Ooi。

https://stackoverflow.com/users/474349/hong-ooi

谢谢,洪欧。

4

1 回答 1

1

lsf.str看起来像一个很好的答案。如果你想要一个更通用的工具,这是我的(这里是喇叭)cgwtools包中的一个。您可以获得环境中任何特定类型对象的列表(不仅仅是闭包)。

lstype <-  function(type='closure'){
#simple command to get only one type of object in current environment
# Note: if you foolishly create variables named 'c' ,'q' ,'t' or the like,
# this will fail because typeof finds the builtin function first
        inlist<-ls(.GlobalEnv)
        if (type=='function') type <-'closure'
        typelist<-sapply(sapply(inlist,get),typeof)
        return(names(typelist[typelist==type]))
}
于 2013-11-06T13:15:43.163 回答