次のような数式のリストがあります。
ATi<-list(quote(-(1/(C1 * Rf) + (1/(C1 * Rc) + (1/(C1 * Rint) + 1/(C1 * Rei))))),
quote(1/(C1 * Rei)), 0, quote(1/(C1 * Rint)), quote(1/(C1 * Rf)),
quote(1/(C1 * Rc)), 0, 0)
List of 8
$ : language -(1/(C1 * Rf) + (1/(C1 * Rc) + (1/(C1 * Rint) + 1/(C1 * Rei))))
$ : language 1/(C1 * Rei)
$ : num 0
$ : language 1/(C1 * Rint)
$ : language 1/(C1 * Rf)
$ : language 1/(C1 * Rc)
$ : num 0
$ : num 0
他のリストにある各パラメーターの値を挿入した後、各式を評価したいと思います。出力として、結果のリストが必要です。私は別のアプローチを試みますが、解決策を見つけました。私はそれをいくつか持っており、このプロセスを自動化するスマートなソリューションが欲しい.
まず、パラメーターの値を挿入します。ATi は私のリスト名で、value は値とパラメーターの名前が格納されるリストです。
value<-c( 0.110546010137993, 9.95953827321208, 7.1751380374394, 285.658095052437,
285.967649817749)
names(value)<-c( "C1", "Rc", "Rei", "Rf", "Rint")
ATi<-gsub("C1",value[["C1"]],ATi)
ATi<-gsub("Rf",value[["Rf"]],ATi)
ATi<-gsub("Rc",value[["Rc"]],ATi)
ATi<-gsub("Rint",value[["Rint"]],ATi)
ATi<-gsub("Rei",value[["Rei"]],ATi)
結果は良さそうですが、文字のリストができたので、評価用の式が必要です。だから私はパースを使います。
ATi<-parse(text=ATi)
ATi<-eval(ATi)
この結果は 0 であり、正しくありません。0 が 3 つだけの 8 つの数字のリストを期待していました。apply parse の結果は次のとおりであるため、エラーは解析中だと思います。
structure(expression(-(1/(0.110546010137993 * 285.658095052437) +
(1/(0.110546010137993 * 9.95953827321208) + (1/(0.110546010137993 * 285.967649817749)
+ 1/(0.110546010137993 * 7.1751380374394)))),
1/(0.110546010137993 * 7.1751380374394), 0, 1/(0.110546010137993 * 285.967649817749),
1/(0.110546010137993 * 285.658095052437), 1/(0.110546010137993 * 9.95953827321208),
0, 0),
srcfile = <environment>, wholeSrcref = structure(c(1L, 0L, 9L, 0L, 0L, 0L, 1L, 9L),
srcfile = <environment>, class = "srcref"))
8 ではなく 1 つの式しかないように見えるので、1 つの結果が得られます。
また、各式を単独で評価しようとしますが、この場合、異なるエラーが発生します。最初の式については、上記のコードを使用しても問題ありません。2 つ目は、"/" が嫌いなため、パースが機能しません。
2番目の式は次のとおりです。
a<-quote(1/(C1 * Rei))
a<-gsub("C1",value[["C1"]],a)
a<-gsub("Rei",value[["Rei"]],a)
gsub を使用した後、配線されているように見えます
c("/", "1", "(0.110546010137993 * 7.1751380374394)")
そのため、おそらく、parse を適用すると..
a<-parse(text=a)
Error in base::parse(...) : <text>:1:1: unexpected '/'
1: /
^
どんなアイデアでも大歓迎です。ありがとう