【问题标题】:Input variable name handling in RR中的输入变量名称处理
【发布时间】:2017-02-21 13:01:22
【问题描述】:

我想了解如何处理函数中变量名的输入。比如我写了一个这样的函数:

bin_multi <- function(y, dataframe, sel = NULL){
  if(!is.null(sel)) {
     dataframe <- dataframe[,sel]}
  else {
     dataframe <- dataframe[!y]}
}

其中dataframe 是输入数据帧,y 是数据帧中的目标变量,sel 是从dataframe 中选择的列,例如sel = c(1,2,3)

此函数的目的是简单地获取具有给定seldataframe 的子集,并且当未给出sel 时,从dataframe 中排除y 目标变量。

我的问题是,我怎样才能在这个函数中正确引用y?在输入中,y 是变量的名称。 deparse() 能解决这个问题吗?

谢谢大家。

【问题讨论】:

  • 输入 y 作为字符向量,然后使用 grepgrepl: dataframe &lt;- dataframe[!grepl(y, names(dataframe), fixed=TRUE)]
  • @lmo 谢谢!但是如果不输入 y 作为字符呢?因为这只是完整功能的一小部分,如果将​​ y 作为字符输入,那么其余部分会变得更加混乱。
  • 我不清楚它会如何变得更混乱,但一个简单的解决方案是在函数顶部复制 y 并在整个过程中使用它:myY &lt;- dataframe[, y]。然后在您的代码中将 y 替换为 myY。
  • @lmo 也可以!

标签: r input variable-names


【解决方案1】:

我认为这会奏效:

bin_multi <- function(y, dataframe, sel = NULL){

  if(!is.null(sel)) {

     dataframe <- dataframe[,sel]

  } else {

     dataframe <- dataframe[,which(names(dataframe) != deparse(substitute(y)))]

  }

}

这是利用this answer 将您的对象名称转换为字符串。

【讨论】:

  • 谢谢!我有deparse(substitute(y)),但我没有使用which(names(.)),不包括y。这正是我想要的工作方式!
猜你喜欢
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
  • 2012-11-04
相关资源
最近更新 更多