Попробуйте eval(parse(text=...))
или eval(substitute(...))
.
parse(text=...)
превращает строку в выражение, eval
вычисляет выражение. Обязательно используйте аргумент text
, так как parse
обычно ищет файл. Забывать, что это распространенная ошибка. Смотрите также ?parse
и ?eval
.
> a <- 10
> x <- deparse(substitute(a))
> eval(parse(text=x))
[1] 10
Чтобы показать, как его использовать, ваш скорректированный код:
for(i in 1:10)
eval(parse(text=paste("rp.slider(rpplot,param",i,")",sep="")))
substitute
заменяет значения в объекте языка на строки, заданные во втором аргументе:
for(i in 1:10)
eval(
substitute(
rp.slider(rpplot,x),
list(x=as.name(paste("param",i,sep="")))
)
)
Или, используя пример в файлах справки:
library(rpanel)
rpplot <- rp.control(title = "Demonstration of rp.tkrplot", h = 1,j=1)
redraw <- function(panel) {
rp.tkrreplot(panel, tkrp)
}
x <- c('h','j')
rp.tkrplot(rpplot, tkrp, function(panel) plot((1:20)^panel$j, (1:20)^panel$h))
eval(parse(text=paste("rp.slider(rpplot, ",x[1]," , action = redraw,
from = 0.05, to = 2.00, resolution = 0.05)")))
eval(
substitute(
rp.slider(rpplot, x, action=redraw, from=0.05, to=2.00, resolution=0.05),
list(x = as.name(x[2]))
)
)
Объяснение, почему это необходимо, можно найти в исходном коде rp.slider. Конструкция для получения varname внутри функции не является стандартом, используемым в R. На самом деле, использование deparse (substitute ()) категорически не рекомендуется, именно по этой причине. С большинством функций as.expression("x")
работает, чтобы получить переменную, используя имя переменной. Увы, автор пакета rpanel
сделал это невозможным.