r - 反码函数,处理引号
问题描述
我正在寻找一些帮助来定义一个函数来反向编码一个序数变量。我正在使用调查数据,其中理论上相关的变量被编码在不同的方向,即对概念的看法是用几个不同的变量来衡量的,其中一些将较高的值表示为“正”,其他将较低的值表示为“正”。我编写了一个函数,允许我对选定的变量进行反向编码,以便它们被一致地编码:
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)
解决方案
你可以做这样的事情,使用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
}
我认为你不应该,但你可以。
推荐阅读
- python - ailValueError:在使用分类器 LDA 时,进入 DGESDD 参数编号 10 时具有非法值
- angular - 在 WebPack_5 上构建没有 @Angular/cli 的 @Angular_12
- python - django + ngnix,提供媒体文件
- aws-lambda - 如何为自定义 GatewayAPI 域的 Route53 别名记录创建 SAM 模板块
- php - 方形支付 api v2 给出支付过程 404 错误
- angular - 仅针对某些请求显示 Global Spinner
- python - Django AuthenticationForm 自定义
- android - Android Studio 中的空白/无 xml 预览
- json - 如何在多部分/表单数据邮递员中发送嵌套数组
- java - Spring Reactive:将通量操纵为单声道响应