оценить одну переменную в выражении с двумя переменными - PullRequest
2 голосов
/ 09 февраля 2012

Я хочу оценить f со средним значением = 7

 mean=7
 f <-  expression(-(x-mean)^2/2)

, затем получить новое выражение:

 -(x-7)^2/2

Как я могу это сделать?Спасибо.

Ответы [ 3 ]

2 голосов
/ 09 февраля 2012

Вот один из способов.

f <- as.call(f)
eval(substitute(substitute(expr, list(mean=7)), list(expr= f)))
# -(x - 7)^2/2()

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

0 голосов
/ 09 февраля 2012

В S-Plus функция substitute имеет дополнительный аргумент evaluate, так что это довольно просто. К сожалению, R упускает этот аргумент ...

# in S-Plus:
x <- expression(-(x-mean)^2/2)
substitute(x, list(mean=7), evaluate=TRUE)
#-(x - 7)^2/2

... так что вы должны прибегнуть к чему-то вроде того, что предлагает @ JoshO'Brien. Подумайте о том, чтобы зарегистрировать это как запрос функции с R core; -)

0 голосов
/ 09 февраля 2012

Как насчет gsub?

avg <- 7
f <- expression(-(x-avg)^2/2)
f.new <- as.expression(gsub('avg',avg,f))

expression("-(x - 7)^2/2")

в примечании, вы должны избегать определения переменных с именами, такими как mean или data, так как они встроены в R функции.

...