找回密码
 注册
查看: 7009|回复: 0

R语言 call 与 do.call 两种函数的区别

[复制链接]
发表于 2011-3-8 17:14:58 | 显示全部楼层 |阅读模式
本帖最后由 genechip 于 2011-3-8 17:15 编辑

函数 call 允许通过函数名字和参数列表创建一个调用对象
      x <- 10.5     > call("round", x)     round(10.5)

如上所见, 是x的值而不是符号 加入了调用中,因此和 round(x)有明显的差异。这种形式用的非常地少,但是当一个函数的名字可以作为一个字符变量时,这会非常有用。

函数 do.call 是相关的,但会立即对调用求值和从含有所有参数的模式为"list"的对象里面获取参数。一个很自然的应用是当我们向把一个函数(如cbind)用于一个列表或数据框的所有对象时。
     is.na.data.frame <- function (x) {      
   y <- do.call("cbind", lapply(x, "is.na"))        
rownames(y) <- row.names(x)        
y     }


其它一些应用包括基于 do.call("f", list(...)) 构造的变种。但是,我们必须知道这包括实际参数调用前的参数求值。这可能阻止函数自身的悠闲求值和参数替换方面。一个类似的注意同样适用于call函数。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 21:43 , Processed in 0.018426 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表