是否有办法将后退标记应用于.Primitive
函数名称的向量,以便可以安全地传递给is.primitive
?
目前,我在get(x)
中使用x
is.primitive(x)
。这些第一次电话,
> is.primitive(`$`)
#[1] TRUE
> is.primitive(get("$"))
#[1] TRUE
是正确的。所有下一个电话都不起作用。
> is.primitive("$")
#[1] FALSE
## which is a bit confusing considering the argument name in
> `$`
#.Primitive("$")
##----
## other tries ...
> is.primitive($)
#Error: unexpected '$' in "is.primitive($"
> is.primitive("`$`")
#[1] FALSE
> is.primitive(`"$"`)
#Error in is.primitive(`"$"`) : object '"$"' not found
> sQuote("$")
#[1] "‘$’"
> is.primitive(sQuote("$"))
#[1] FALSE
> as.name("$") ## most promising! ...
#`$`
> is.primitive(as.name("$")) ## ...but no
#[1] FALSE
我这样做的原因是因为我想使用类似
之类的内容对package:base
中的对象进行一些分析
Vis.primitive <- Vectorize(is.primitive)
我将使用的矢量x
是
x <- ls("package:base")
答案 0 :(得分:2)
值得阅读函数式编程的帮助
(?Map
/ ?Filter
)
这给出了如何使用Filter
执行此类分析的示例。
您可以执行类似
的操作 Filter(is.primitive, sapply(ls(baseenv()), get, baseenv()))
另一种方法是使用match.fun
搜索功能
例如
match.fun('$')
没有必要使用`
混淆!