Аналогично решению @ g-grothendieck , но с strsplit
.
s <- strsplit(paste(as.character(fml)[-1], collapse="+"), "\\+")[[1]]
sapply(s, function(s) with(dat, eval(parse(text=s))))
# log(y) x^2 x * z z
# [1,] 0.3155101 1.70268481 0.40012340 0.3066386
# [2,] -0.5714639 5.22874715 4.07322072 1.7813084
# [3,] -1.0129988 1.92893405 0.23876926 0.1719174
# [4,] -0.4575019 0.07772318 0.33863766 1.2146747
# [5,] -0.9056765 0.01777458 0.25266972 1.8951935
# [6,] -2.2431422 0.40443291 0.27375702 0.4304691
# [7,] 0.4131171 0.08079972 0.07312957 0.2572694
# [8,] -2.3574739 7.05675540 4.68376414 1.7631631
# [9,] 0.7023169 5.95587883 1.12285238 0.4600974
# [10,] -2.7691690 1.74269925 0.84486578 0.6399949
Данные
dat <- structure(list(y = c(1.37095844714667, 0.564698171396089, 0.363128411337339,
0.63286260496104, 0.404268323140999, 0.106124516091484, 1.51152199743894,
0.0946590384130976, 2.01842371387704, 0.062714099052421), x = c(1.30486965422349,
2.28664539270111, 1.38886070111234, 0.278788766817371, 0.133321336393658,
0.635950398070074, 0.284252921416072, 2.65645542090478, 2.44046692857552,
1.32011334573019), z = c(0.306638594078475, 1.78130843398, 0.171917355759621,
1.2146746991726, 1.89519346126497, 0.4304691316062, 0.25726938276893,
1.76316308519478, 0.460097354831271, 0.639994875960119)), row.names = c(NA,
-10L), class = "data.frame")
fml <- log(y) ~ x^2 + x*z + z