Преобразование типа символа в логическое

Я пытаюсь создать код, который очень удобен для пользователей, не знакомых с R. Код разработан так, что логические критерии можно легко манипулировать, основываясь на том, что ищет пользователь. Поэтому вместо того, чтобы заставить пользователя работать в операторах if, я хотел бы просто создать символьную переменную, содержащую логический оператор в верхней части кода (т.е. x <- "a > 2").

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

a <- 3
x <- "a > 2"
if(x)TRUE

Это, очевидно, возвращает ошибку, что аргумент не интерпретируется как логический, поскольку он видит x как символьную строку "a > 2."

Я знаю, что могу просто сделать:

a <- 3
x <- as.logical(a > 2)
if(x)TRUE

Однако в случае того, над чем я работаю, было бы предпочтительнее сначала хранить эти логические операторы как символы. И as.logical(), похоже, не способен преобразовывать символы (т.е. as.logical("a > 2")) не работает.

Мой вопрос: есть ли какая-то функция, которую я могу положить через x, которая позволяет R рассматривать ее не как символ, а скорее как логическое выражение? Другими словами, как я могу просто отбросить кавычки, чтобы логический оператор мог работать внутри оператора if?

Ответ 1

Вы можете использовать eval(parse(...)).

a <- 3
x <- "a > 2"

eval(parse(text=x))
[1] TRUE

x2 <- "a==3"
eval(parse(text=x))
[1] TRUE

Здесь будут драконы.

См., например: