评估符号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
如果'SOLN
@ G.Grothendieck - 感谢您的有用评论。我将它嫁接在上面,以便完成答案。 –
@G。格洛腾迪克谢谢。这是我错过的一步。发布它作为答案。 –