当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R call 函数调用


R语言 call 位于 base 包(package)。

说明

创建或测试 mode "call" (或 "(" ,请参阅详细信息)的对象。

用法

call(name, ...)
is.call(x)
as.call(x)

参数

name

命名要调用的函数的非空字符串。

...

参数是调用的一部分。

x

任意的R对象。

细节

call

返回未计算的函数调用,即由应用于给定参数的命名函数组成的未计算的表达式(name 必须是给出要调用的函数名称的字符串)。请注意,尽管该调用未求值,但参数 ... 已求值。

call 是原语,因此第一个参数被视为 name ,其余参数作为构造调用的参数:如果命名第一个参数,则名称必须部分匹配 name

is.call

用于确定 x 是否是一个调用(即模式 "call""(" )。注意

  • is.call(x) 严格等同于 typeof(x) == "language"

  • is.language() 对于调用也适用(但对于 symbolexpression 也适用,其中 is.call() 为 false)。

as.call(x)

模式 "list" 的对象可以强制为模式 "call" 。列表的第一个元素成为调用的函数部分,因此应该是函数或函数的名称(作为符号;字符串不行)。

如果您考虑使用 as.call(<string>) ,请考虑使用 str2lang(*) ,它是 parse(text=*) 的高效版本。请注意,call()as.call() 在适用时比这些基于 parse() 的方法更可取。

这三个都是primitive 函数。

as.call 是通用的:您可以编写方法来处理特定类的对象,请参阅 InternalMethods

警告

call 不应被用来尝试规避对 .Internal 和其他非 API 调用的使用限制。

例子

is.call(call) #-> FALSE: Functions are NOT calls

## set up a function call to round with argument 10.5
cl <- call("round", 10.5)
is.call(cl) # TRUE
cl
identical(quote(round(10.5)), # <- less functional, but the same
          cl) # TRUE
## such a call can also be evaluated.
eval(cl) # [1] 10

class(cl) # "call"
typeof(cl)# "language"
is.call(cl) && is.language(cl) # always TRUE for "call"s

A <- 10.5
call("round", A)        # round(10.5)
call("round", quote(A)) # round(A)
f <- "round"
call(f, quote(A))       # round(A)
## if we want to supply a function we need to use as.call or similar
f <- round
## Not run: call(f, quote(A))  # error: first arg must be character
(g <- as.call(list(f, quote(A))))
eval(g)
## alternatively but less transparently
g <- list(f, quote(A))
mode(g) <- "call"
g
eval(g)
## see also the examples in the help for do.call

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

do.call 用于通过名称和参数列表调用函数; Recall 用于函数的递归调用;进一步is.languageexpressionfunction

从字符生成 call 等: str2langparse

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Function Calls。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。