Функция обратного кода, работающая с кавычками - PullRequest
0 голосов
/ 01 июня 2018

Мне нужна помощь в определении функции для обратного кодирования порядковой переменной.Я использую данные опроса, в которых теоретически связанные переменные кодируются в разных направлениях, т. Е. Восприятие концепции измеряется несколькими различными переменными, некоторые из которых обозначают более высокие значения как «положительные», другие обозначают более низкие значения как «положительные».Я написал функцию, которая позволяет мне изменять код выбранных переменных, чтобы они были последовательно закодированы:

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 голосов
/ 01 июня 2018

Вы можете сделать что-то подобное, используя 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
}

Я не думаю,Вы должны, но вы можете.

...