つまり、データフレームの各行に適用したい式のリストがあります。これはこの質問と非常によく似ていますが、関数のリストではなく、式のリストがあるという点で微妙な違いがあります。これが私が試みていることです:
paste
式のテキスト文字列を形成するために渡す方程式項のデータフレームがあります。
# build a test dataframe
a <- c(10, 11, 12)
b <- c(0.5, 06, 0.7)
c <- c(300, 400, 500)
d <- c(1000, 2000, NA)
p <- c(1.32, 1.37, 1.43)
m <- c(0.45, .55, .65)
params <- data.frame(a, b, c, d, p, m)
# create vector of expressions
ff.txt <- paste(params$a, "*2 + ",
params$b, "*3 + ",
params$c, "*4 + ",
params$d, "*5 * ",
"x * ",
params$p, " * ",
params$m,
sep = "")
これは、「10*2 + 0.5*3 + 300*4 + 1000*5 * x * 1.32 * 0.45」など、テキストとして格納された式のベクトルを返します。
次に、次を使用してテキスト式を R 式に変換する関数を作成しましたparse
。
funs.list <- lapply(funs.txt, function(x) parse(file = "", text = x))
...funs.txt
は、テキストとして格納された式のベクトルです。
さて、ここが私が困っているところです。Imaginefuns.list
には 2 つの式が含まれます。私が次のようなことをした場合:
lapply(funs.list, eval, envir = list(x=c(7, 60)))
... 2x2 行列が返されます。ここでは、答えだけが対角線上にあるようにします。(最終的には、最適化の一環として繰り返し呼び出される約 1,000 の式が必要になるため、追加の計算作業は必要ありません。)
私が試した他のアプローチは次のとおりです。
mapply(do.call, funs.list, lapply(params, list))
...しかし、エラーメッセージが表示されdo.call
ます'what' must be a character string or a function
。
ここからどこへ行くべきかについての提案はありますか?