Как я могу заменить имена переменных в уравнениях в R? - PullRequest
0 голосов
/ 05 ноября 2019

В настоящее время я пытаюсь проанализировать уравнения между двумя разными текстовыми файлами, созданными разными программами. Допустим, у меня есть следующие строки:

test_vector <- c("a*xa", "a+ax", "xa+a", "x*a", "(a)*(axa)") 

Я хочу заменить переменную a на число 0,5

Если я попытаюсь

stringr::str_replace_all(test_vector, "a", "0.5")

Я получаю

[1] "0.5*x0.5"        "0.5+0.5x"        "x0.5+0.5"        "x*0.5"           "(0.5)*(0.5x0.5)"

Однако, я ожидаю

 [1] "0.5*xa"      "0.5+ax"      "xa+0.5"      "x*0.5"       "(0.5)*(axa)"

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2019

Вот решение без регулярных выражений, которое анализирует строки, заменяет переменную в выражении, а затем снова отбрасывает ее в виде строки:

str_substitute <- function(x, ...){
  sapply(parse(text= x), function(x) deparse(do.call(substitute, list(x, list(...)))))
}
test_vector <- c("a*xa", "a+ax", "xa+a", "x*a", "(a)*(axa)") 
str_substitute(test_vector, a = 0.5 )
#> [1] "0.5 * xa"      "0.5 + ax"      "xa + 0.5"      "x * 0.5"      
#> [5] "(0.5) * (axa)"
str_substitute(test_vector, xa = quote(y), ax =  quote(z), a = .5)
#> [1] "0.5 * y"       "0.5 + z"       "y + 0.5"       "x * 0.5"      
#> [5] "(0.5) * (axa)"

Создано в 2019-11-05 с помощью представьте пакет (v0.3.0)

Обратите внимание, что вы можете получить дополнительные пробелы или удалить пробелы здесь и там с некоторыми входными данными

0 голосов
/ 05 ноября 2019

Попробуйте с gsub, т.е. gsub("\\ba\\b","0.5",test_vector)

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