Передача строк в функции с использованием rlang :: sym и восклицательных знаков - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть функция, в которой я пытаюсь получить горячее кодирование столбца.Кажется, моя проблема связана с тем, как R интерпретирует строковое значение столбца, когда оно передается из функции:

function_notworking = function(data, col){

result = model.matrix(~col -1, data=data)
return(result)
}
 # doesnt work
function_notworking(data=iris, col='Species')

Однако, если я это сделаю:

model.matrix(~Species -1, data = iris) it does work just fine.

Далее я попытался изучить это добавление rlang :: sym () и !!перед 'col', но это, похоже, тоже не работает.

function_notworking = function(data, col){
    col = rlang::sym(col) # 
    result = model.matrix(~col -1, data=data)
    #or result = model.matrix(~!!col -1, data=data)
    return(result)
    }

Нужно понять, как передать имена столбцов, подобные этой, и не получить проблему.

Если я использую expr () вокруг кода, кажется, что код !! rlang :: sym (col) делает свою работу, но я застрял.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Попробуйте это:

makeMM <- function(data, col) model.matrix(~ . - 1, data[col])

# test
makeMM(iris, "Species")
0 голосов
/ 23 сентября 2018

Нам нужно сделать paste

function_working = function(data, col){

    model.matrix(as.formula(paste0("~ ", col,  -1)), data=data)
    # or create the formula with glue
    # model.matrix(formula(glue::glue("~{col} -1")), data = data) 

 }

function_working(data=iris, col="Species")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...