评估符号Ryacas表达

问题描述:

这是一个可再现的例子:评估符号Ryacas表达

a <- 0.05 
za.2 <- qnorm(1-a/2) 
b <- 0.20 
zb <- qnorm(1-b) 

lambda12 <- -log(1/2)/12 
lambda18 <- -log(1/2)/18 
theta <- lambda18/lambda12 
(d = round(4*(za.2+zb)^2/log(theta)^2)) 

Tf<-36 
library(Ryacas) 
n <- Sym("n") 

Solve(n/2*(2-exp(-lambda12*Tf)-exp(-lambda18*Tf))==d , n) 

最后一行返回

expression(list(n == 382/1.625)) 

有一种方法来提取的商和将其分配给另一个变量(235.0769)?

G.Grothendieck在你需要抢先占领表达以下时要操作的评论指出:

soln <- Solve(n/2*(2-exp(-lambda12*Tf)-exp(-lambda18*Tf))==d , n) 
X <- yacas(soln)$text 

然后,提取商,你可以采取这样的事实优势很多R语言对象都可以被强制转换为列表。

X <- expression(list(n == 382/1.625)) 
res <- eval(X[[1]][[2]][[3]]) 
res 
[1] 235.0769 

下面只说明了为什么索引的该序列中提取右片的表达式:

as.list(X) 
# [[1]] 
# list(n == 382/1.625) 

as.list(X[[1]]) 
# [[1]] 
# list 
# 
# [[2]] 
# n == 382/1.625 

as.list(X[[1]][[2]]) 
# [[1]] 
# `==` 
# 
# [[2]] 
# n 
# 
# [[3]] 
# 382/1.625 
+2

如果'SOLN

+0

@ G.Grothendieck - 感谢您的有用评论。我将它嫁接在上面,以便完成答案。 –

+0

@G。格洛腾迪克谢谢。这是我错过的一步。发布它作为答案。 –