2

つまり、データフレームの各行に適用したい式のリストがあります。これはこの質問と非常によく似ていますが、関数のリストではなく、のリストがあるという点で微妙な違いがあります。これが私が試みていることです:

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

ここからどこへ行くべきかについての提案はありますか?

4

2 に答える 2

2

私が正しく理解している場合は、最初の式を x の最初の値で評価し、2 番目の式を 2 番目の値で評価する必要があります。

あなたがすることができます:

mapply(function(ex, x) eval(ex, envir = list(x = x)), funs.list[1:2], c(7, 60))
于 2015-06-23T10:44:33.537 に答える