引用R中没有引号的列

时间:2013-07-15 13:15:17

标签: r

例如,在包ggplot2中,您可以指定:ggplot2(data = mydataframe, aes(x=mycolumnname))。我正在寻找类似的东西,但我找到的唯一解决方案是使用带有引号名称的双括号运算符。例如传递:

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

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

2 个答案:

答案 0 :(得分: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关于危险的评论。

答案 1 :(得分: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)]
  }