是否有方法将反引号应用于.Primitive
函数名称的向量,以便它可以安全地传递给is.primitive
?
目前我用get(x)
代替is.primitive(x)
中的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")
函数式编程的帮助值得一读
(?Map
/?Filter
)
这给出了如何使用Filter
执行此类分析的示例。
你可以这样写
Filter(is.primitive, sapply(ls(baseenv()), get, baseenv()))
另一种选择是使用match.fun
来搜索函数
如
match.fun('$')
没有必要乱搞`
!