преобразование символьного элемента в объект в R - PullRequest
1 голос
/ 09 мая 2020

Мне было интересно, можно ли преобразовать элемент фрахтователя, например, "high", в объект с тем же именем, например, high?

Вот что я имею в виду в коде R ( желаемый результат ):

(Примечание: представьте, что ниже представлена ​​функция, what может быть любым, d может быть любым)

what <- "high"
   d <- 1:4
high <- d # Here use `what` and turn "high" to high and assign object `d` to high

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Обычно вы не хотите этого делать, потому что это нарушает ссылочную прозрачность и добавляет ненужную сложность: в частности, делает непредсказуемым, какие переменные существуют во время выполнения вашего кода, что усложняет код для чтения, поддержки и отладки.

В любом случае, в вашем случае присвоение переменной с нефиксированным именем на самом деле не помогает при построении вашей матрицы модели. К счастью, в вашем случае это тоже не нужно. Ваш существующий код работает как есть. Но если вы хотите изменить имена выходных столбцов, сделайте это на уровне имени столбца , а не на уровне имени переменной :

foo <- function(data, what) {
    dum <- data[[what]]
    if (! is.character(dum)) stop('Not a character variable.', call. = FALSE)
    model <- data.frame(model.matrix(~ dum))[-1L]
    colnames(model) <- sub('^dum', what, colnames(model))
    model
}

В качестве альтернативы, и в этом случае еще проще, построить формулу из what:

foo <- function(data, what) {
    if (! is.character(data[[what]])) stop('Not a character variable.', call. = FALSE)
    formula = as.formula(paste('~', what))
    data.frame(model.matrix(formula, data = data))[-1L]
}
0 голосов
/ 09 мая 2020
Функция

assign может быть решением, которое вы ищете.

what <- "high"
   d <- 1:4
high <- d

assign(what,d)

assign("high",d)

Таким образом, персонаж и объекты могут воспроизводиться с помощью

Другие вещи, которые я пробовал, используют функцию

as.name

, которая будет вроде как удалить кавычки. Но это приведет к ошибке в назначении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...