r do call

函数 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函数。

head(iris)  

#数据分组  
iris.split <- split(iris,as.factor(iris$Species))  

#数据分组计算平均值  
iris.apply <- lapply(iris.split,function(x)colMeans(x[-5]))  

# 组合结果  
iris.combine <- do.call(rbind,iris.apply)  
iris.combine 

猜你喜欢

转载自blog.csdn.net/changzoe/article/details/80091978