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