typeof call vs typeof expression

时间:2016-06-01 16:36:33

标签: r

R-lang说:"有三种类型的对象构成R语言。他们是电话,表达,......"

这是一个表达和一个电话:

ex <- expression(max(1:3))
cl <- call("max", x = 1:3)

它们都是语言对象:

is.language(ex)
# [1] TRUE
is.language(cl)
# [1] TRUE

表达式的类型为表达式

typeof(ex)
# [1] "expression"

我希望调用类型调用,但它们是更通用的类型语言

typeof(cl)
# [1] "language"

有谁知道这背后是否有任何理性?我错过了一些重要的事情吗?

提前感谢您的支持

1 个答案:

答案 0 :(得分:2)

typeof返回有关存储机制的信息。这就是typeof( factor(letters) )返回integer的原因。

使用class函数查询对象而不是使用typeof通常会提供更多信息。

> class(cl)
[1] "call"

?typeof帮助页面还会引导您?storage.mode,其中包含更多详细信息,即使typeof是更多&#34;基础&#34;在使用storage.mode

定义typeof的意义上的函数
> storage.mode(cl)
[1] "language"

R表达式和调用之间的差异偶尔会让我失望。 bquote函数返回call - 对象,而不是&#34; true&#34; R表达。曾经导致格子绘图函数拒绝对bquote的结果进行plotmath评估,尽管我认为这个故障已得到修复。你也应该熟悉替代品的操作以及它解析它的论据的差异:

substitute( expression(max(1:3)), list(max=min))
#expression(.Primitive("min")(1:3))  # Success

substitute( call('max', x=1:3), list(max=min))
#call("max", x = 1:3)  #Failure