Question : est-il possible d'accélérer ce calcul ?

A chaque élément x[i] d'un vecteur de valeurs numériques, j'associe l'élément [i] correspondant d'un vecteur composé de fonctions simples de la seule variable x. Ces fonctions sont données sous forme d'une chaine de caractères de la forme "<expression>". Difficulté : ces fonctions sont toutes différentes (le calcul avec une même fonction est instantané).

Après plusieurs tentatives -utilisation de la fonction outer par exemple - je n'ai pas trouvé plus rapide que l'écriture triviale :
(calcul très long car il prend 23.5s pour 100000 valeurs)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#-------------------------------------------
#test 
rm(list=ls(all=TRUE))
long1=100000 #nombre de lignes
#
#génération de valeurs et de fonctions pour test
x1<-double(long1)
x1<-seq(1.1,110,length=long1)
#fonctions simples entre ""
sexpr0<-character(long1)
for (i in 1:long1) {
sexpr0[i]<-paste("x*x+", as.character(i), ".0", sep="")
}
sexpr0[1] # "x*x+1.0"
sexpr0[long1-1] # "x*x+99999.0"
sexpr0[long1]# "x*x+100000.0"
#
y1<-double(long1)
#-------------------------------
#calcul de chaque valeur 
system.time(for (i in 1:long1) {
x<-x1[i]
y1[i]<-eval(parse(text=sexpr0[i]))
})
 
x1[1]
y1[1]		#2.21
x1[long1-1]
y1[long1-1]	# 112098.8
x1[long1]	
y1[long1]	# 112100
La solution devrait être dans la vectorisation des expressions mais je n'ai pas trouvé !