首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制函数调用中的参数数?

复制函数调用中的参数数?
EN

Stack Overflow用户
提问于 2014-05-23 21:35:56
回答 2查看 117关注 0票数 1

关于我的另一个职位:

https://stackoverflow.com/questions/23838396/faster-combn-expand-grid-with-rcpp

如果我有一个名为ids的字符向量,并且我想这样做:

代码语言:javascript
复制
expand.grid(ids,ids)
expand.grid(ids,ids,ids)
expand.grid(ids,ids,ids,ids)
expand.grid(ids,ids,ids,ids,ids)

我想在可以的范围内编写一个函数:

代码语言:javascript
复制
n_args <- function(var,n, fun)

所以我可以打电话给:

代码语言:javascript
复制
result <- n_args(ids,5,expand.grid)

相等于

代码语言:javascript
复制
result <- expand.grid(ids,ids,ids,ids,ids)

但我被困在:

代码语言:javascript
复制
n=5
rep(quote(var),n)

> Error in rep(quote(var), 5) : 
>  attempt to replicate an object of type 'symbol'

我如何编写这样的函数,或者它是否存在于R中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-23 22:31:32

do.call()是按照@no葡萄的方式走的。正如错误所暗示的,rep()没有用于symbol类的方法。

但是,如果您真的想要n_args(ids,5,expand.grid)语法呢?我想我应该想点办法。

替代解决方案?

使用我想出的parse()-type函数:

代码语言:javascript
复制
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
}

它提供了接近所需语法的内容:

代码语言:javascript
复制
result <- n_parse( quote(var), 5, quote(expand.grid) )

和一个具有字符串输入的版本:

代码语言:javascript
复制
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
}

该词用于:

代码语言:javascript
复制
results <- n_parse_string( "ids", 5, "expand.grid")

提供预期的产出。至少在不规范的评估中这是个小练习。

票数 3
EN

Stack Overflow用户

发布于 2014-05-23 21:43:30

您正在寻找do.call函数。您可以将函数作为其参数之一传递,以及要传递给该函数的参数列表。下面是一个例子。

代码语言:javascript
复制
do.call(expand.grid, rep(list(ids),3))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23838650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档