r - 如何检索原始函数的形式?

标签 r

目前,至少,这对我来说是一个学习练习,因此实际功能或其复杂性不是问题。假设我编写了一个函数,它的参数列表包括一些输入变量和一个函数名,作为字符串传递。然后这个函数在内部计算一些变量并“决定”如何将它们提供给我传入的函数名称。

对于非原始函数,我可以这样做(对于这个例子,假设我的 funcname 函数中没有任何参数,除了最多 (x,y,z) 。如果他们这样做了,我必须写一些代码来搜索匹配的 names(formals(get(funcname)))以免删除其他参数):

foo <- function (a,b,funcname) {
    x <- 2*a
    y <- a+3*b
     z <- -b
    formals(get(funcname)) <- list(x=x, y=y, z=z)
    bar <- get(funcname)()
return(bar)
}

好消息是,即使函数 funcname即使不使用 x 也不会出错, yz (只要没有其他没有默认值的参数)。
“原始”函数的问题是我不知道找到或修改它们的形式的任何方法。除了编写包装器,例如foosin <-function(x) sin(x) , 有没有办法设置我的foo函数使用原始和非原始函数名称作为输入参数?

最佳答案

formals(args(FUN))可用于获取原始函数的形式。

您可以添加 if对现有函数的声明。

> formals(sum)
# NULL
> foo2 <- function(x) {
      if(is.primitive(x)) formals(args(x)) else formals(x)
      ## formals(if(is.primitive(x)) args(x) else x) is another option
  }
> foo2(sum)
# $...
#
#
# $na.rm
# [1] FALSE
#
> foo2(with)
# $data
# 
#
# $expr
#
#
# $...

关于r - 如何检索原始函数的形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25978301/

相关文章:

R:将循环转换为向量化执行以实现行之间的相关性

r - Lyx 中的 knitr 安装

r - 如何在R函数中将对象导出到并行集群

r - R 中文本的部分匹配

r - 调整轴位置 ggplot2 面

r - 如何使用 R 绘制以下图?

r - 使用 data.table 进行映射的最佳方式

mysql - 如何将 SQL count(*) 与 dplyr 一起使用?

r - 在极坐标图上绘制曲线

c# - 将 R 与 RdotNet 连接时显示设置环境变量 'PATH'