Я пытаюсь создать блестящее приложение, чтобы помочь с анализом решений. В части приложения пользователь должен ввести свою служебную функцию в виде текста, который R / блестящий конвертирует в выражение. Предположим, что пользователь имеет три части своих функций полезности, которые будут объединены в большую функцию полезности. У меня проблема с определением элементов списка в for
l oop:
utility.fns <- list()
ufs <- list() ## user input
## each ufs is specified by the user
ufs[[1]] <- "x+1"
ufs[[2]] <- "sin(x)"
ufs[[3]] <- "cos(x)^2"
for(i in 1:3){
## turn the text into functions
utility.fns[[i]] <- function(x){
eval( parse(text = ufs[[i]]) )
}
}
utility.fns[[1]](1) ## returns cos(1)^2 ?
. Странно то, что список utility.fns
всегда возвращает utility.fns[[3]]
, независимо от индекса. Однако ручное переопределение
> utility.fns[[1]] <- function(x){
+ eval( parse(text = ufs[[1]]) )
+ }
> utility.fns[[1]](1)
[1] 2
устраняет проблему. Очевидно, я не могу вручную переопределить каждый раз!