R 语言指出:“构成 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"
我希望调用的类型为call,但它们是更通用的类型语言
typeof(cl)
# [1] "language"
有谁知道这背后是否有任何合理性?我错过了一些重要的事情吗?
预先感谢您的支持
最佳答案
typeof
返回有关存储机制的信息。这就是 typeof( Factor(letters) )
返回 integer
的原因。
使用 class
函数查询对象通常比使用 typeof
能提供更多信息。
> class(cl)
[1] "call"
?typeof
帮助页面还向您推荐 ?storage.mode
,其中包含更多详细信息,尽管 typeof
更“基本” "函数的意义是 storage.mode
是使用 typeof
定义的:
> storage.mode(cl)
[1] "language"
R 表达式和调用之间的差异有时会让我感到困惑。 bquote
函数返回一个 call
对象,而不是“true”R 表达式。一度导致点阵绘图函数拒绝对 bquote 的结果进行绘图评估,尽管我认为该故障已得到修复。您还应该熟悉替代的操作以及它解析参数的方式的差异:
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
关于r - typeof 调用与 typeof 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37574281/