0

例如,在包 ggplot2 中,您可以指定:ggplot2(data = mydataframe, aes(x=mycolumnname)). 我正在做类似的事情,但是我发现的唯一解决方案是使用双括号运算符和引号中的名称。例如传递:

a = myfunction(data = mydataframe, name = "mycolumnname") {
    ...
    col = mydataframe[[name]]
    ...
}

我知道这很挑剔,但是有没有一种方法可以让用户不必在引号中输入参数名称?我一直在 R 函数中看到它。

4

2 回答 2

6

另一种选择是使用match.call

  myfunction <- function(DF,col) {
    pars <- as.list(match.call()[-1])
    DF[,as.character(pars$col)]

  }

那么所有这些陈述都是等价的:

  myfunction(dat,b)
  myfunction(dat,col=b)
  myfunction(dat,col="b")

当然,您可以将其推广到所有函数参数:

  myfunction <- function(DF,col) {
    pars <- as.list(match.call()[-1])
    get(as.character(pars$DF))[,as.character(pars$col)]
  }
于 2013-07-15T13:31:02.710 回答
6

像这样的东西?

myfunction <- function(DF,col) {
  DF[,as.character(substitute(col))]
}

dat <- data.frame(a=1:5,b=6:10)

myfunction(dat,b)
#[1]  6  7  8  9 10

请参阅@Justin 关于危险的评论。

于 2013-07-15T13:22:19.790 回答