Как использовать переменные символьные строки с функцией замены в R - PullRequest
2 голосов
/ 09 мая 2019

Мне нужно иметь возможность заполнить выражение значениями неизвестного числа переменных. Форма выражения зависит от количества переменных.


Пример:

Выражение1 : "курсив (у) == а * курсив (х) * б"

становится : " y = 1,2 x + 4,3"

Выражение2 : "курсив (y) == a * курсив (x) * b ~ c"

станет : " y = 1,2 x + 4,3 -5,3"


В настоящее время я использую функцию substitute , но она не работает вместе с функцией expression:

substitute(expression("italic(y)==a*italic(x)*b"),list(a=1.23,b=2.3))

Мое выражение должно расти по мере увеличения числа переменных (то есть длины списка). Итак, следующим шагом будет добавление переменной c :

substitute(expression("space1*italic(y)==a*italic(x)*b*c"),list(a=1.23,b=2.3,c=3.2))

Но мне нужно изменить выражение в коде без какого-либо ручного вмешательства, и эти коды не читают значения переменных из списка, если я не изменяю его на это (в котором выражение больше не может быть расширено, поскольку оно не является строкой ):

substitute(italic(y)==a*italic(x)*b*c,list(a=1.23,b=2.3,c=3.2))

Как я могу это сделать?

1 Ответ

1 голос
/ 09 мая 2019

Вот скрипт, который может соответствовать тому, что вы хотите.Мы можем перебрать список замен, используя цикл for, а затем выполнить регулярное выражение замены заполнителя в выражении на соответствующее значение из списка.

lst <- list(a=1.23,b=2.3)
expression <- "italic(y)==a*italic(x)*b"

for (name in names(lst)) {
    expression <- gsub(paste0("\\b", name, "\\b"), lst[[name]], expression)
}

print(expression)

[1] "italic(y)==1.23*italic(x)*2.3"

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

...