关于我的另一个职位:
https://stackoverflow.com/questions/23838396/faster-combn-expand-grid-with-rcpp
如果我有一个名为ids的字符向量,并且我想这样做:
expand.grid(ids,ids)
expand.grid(ids,ids,ids)
expand.grid(ids,ids,ids,ids)
expand.grid(ids,ids,ids,ids,ids)我想在可以的范围内编写一个函数:
n_args <- function(var,n, fun)所以我可以打电话给:
result <- n_args(ids,5,expand.grid)相等于
result <- expand.grid(ids,ids,ids,ids,ids)但我被困在:
n=5
rep(quote(var),n)
> Error in rep(quote(var), 5) :
> attempt to replicate an object of type 'symbol'我如何编写这样的函数,或者它是否存在于R中?
发布于 2014-05-23 22:31:32
do.call()是按照@no葡萄的方式走的。正如错误所暗示的,rep()没有用于symbol类的方法。
但是,如果您真的想要n_args(ids,5,expand.grid)语法呢?我想我应该想点办法。
替代解决方案?
使用我想出的parse()-type函数:
n_parse <- function(var,n,fun) {
args_v <- rep(deparse(var),n)
args_sep <- paste0(args_v,collapse=",")
fxn_name <- deparse(fun)
expr <- parse(text=paste0(fxn_name,"(",args_sep,")",collpase=""))
out <- eval.parent(expr)
out
}它提供了接近所需语法的内容:
result <- n_parse( quote(var), 5, quote(expand.grid) )和一个具有字符串输入的版本:
n_parse_string <- function(var,n,fun) {
args_v <- rep(var,n)
args_sep <- paste0(args_v,collapse=",")
expr <- parse(text=paste0(fun,"(",args_sep,")",collpase=""))
out <- eval.parent(expr)
out
}该词用于:
results <- n_parse_string( "ids", 5, "expand.grid")提供预期的产出。至少在不规范的评估中这是个小练习。
发布于 2014-05-23 21:43:30
您正在寻找do.call函数。您可以将函数作为其参数之一传递,以及要传递给该函数的参数列表。下面是一个例子。
do.call(expand.grid, rep(list(ids),3))https://stackoverflow.com/questions/23838650
复制相似问题