反向代码函数,处理引号

时间:2018-06-01 07:27:56

标签: r nse

我正在寻找一些帮助来定义一个函数来反转代码序数变量。我使用调查数据,其中理论相关的变量在不同的方向编码,即,概念的感知是用几个不同的变量来衡量的,其中一些变量表示更高的值为“正”"其他表示较低的值。值为"肯定"。我编写了一个函数,允许我对所选变量进行反向编码,以便对它们进行一致编码:

reverse_code <- function(x, df){
  df[x] <- df[x] * -1 + max(df[x], na.rm = TRUE) + 1
  return(df)
}

# call the function - note that var names need to be quoted, but not the dataframe
data <- reverse_code(c("var1", "var2", "var3", "var4"), data)

但是您在上面的代码注释中看到它对引号很敏感。需要引用变量名称,但不能引用数据帧。有关如何使其工作以使其对包含/排除引号不敏感的任何想法?我想在开头包含一个if / else语句来测试引号,但我不确定如何做到这一点。

我意识到这个函数已经假定数据已经被清除了负值,对于我通常使用的数据,它几乎只是表示缺失值。

修改

根据评论,澄清一下,如果我这样调用函数,我想要无所谓:

reverse_code(var1, data)

或者像这样:

reverse_code("var1", data)

1 个答案:

答案 0 :(得分:1)

您可以使用match.call

执行此类操作
foo <- function(x, df) {

  thecall <- match.call()

  if (is.symbol(thecall[["x"]])) return(paste0("NSE: ", as.character(thecall[["x"]])))
    else
  return(paste0("SE: ", x))  
}

foo(x)
#[1] "NSE: x"
foo("x")
#[1] "SE: x"

或者如果您不需要额外处理,只需:

foo <- function(x, df) {

  thecall <- match.call()

  x <- as.character(thecall[["x"]])

  x
}

我认为你不应该,但你可以。