我通过R运行WolframAlpha Wolfram Alpha API from R
我的问题是,我需要将Wolfram输出转换为R表达式。 我在需要的地方添加了“ *”,还有另一个问题-测角函数的转换。
示例:
我有: cos ^ 3(5 + 2 * x)
我需要得到:(cos(5 + 2 * x))^ 3
有人可以提示我如何实现该表达吗?还是有任何转换包?还是有人建议其他方式?
@G的解决方案。格洛腾迪克
sub("(sin|cos|tan)\\^(\\(?-?\\d+\\)?)", "(function(x) \\1(x)^\\2)", 'cos^3(5 + 2*x)')
答案 0 :(得分:4)
定义一个名为cos^3
的函数,将反引号插入周围的原始字符串中并求值。
`cos^3` <- function(x) cos(x)^3
s <- sub("cos^3", "`cos^3`", input_string, fixed = TRUE) # `cos^3`(5 + 2*x)
x <- .5 # test value for x
eval(parse(text = s))
## [1] 0.8852069
如果需要这样的话,可以概括一下:
input_string <- "cos^(3)(5+2*x)"
sub("(sin|cos|tan)\\^(\\(?-?\\d+\\)?)", "(function(x) \\1(x)^\\2)", input_string)
## [1] "(function(x) cos(x)^(3))(5+2*x)"
答案 1 :(得分:1)
我认为您拥有原始公式作为字符串,并希望在R中使用修改后的语法对其求值。您可以使用sub
更改公式,然后使用parse
和eval
对其求值。
F1 = "cos^3(5 + 2*x)"
F2 = sub("(.*)(\\^\\d)(.*)", "\\1\\3\\2", F1)
F2
[1] "cos(5 + 2*x)^3"
x = 1:4
eval(parse(text=F2))
[1] 4.284944e-01 -7.563824e-01 8.668527e-08 7.472458e-01
答案 2 :(得分:1)
这是针对您特定情况的解决方案,应该可以帮助您开始更一般的解决方案(这适用于'cos^X(Y)'
形式的字符串,其中X
是一些数字,而Y
是一个算术表达式):
input_string <- 'cos^3(5 + 2*x)'
desired_output_string <- '(cos(5 + 2*x))^3'
convert_string <- function(s){
return(gsub('(cos)(\\^\\d+)(\\([a-z0-9+* ]+\\))', '(\\1\\3)\\2', s))
}
output_string <- convert_string(input_string)
if (output_string == desired_output_string){
message('the output matches!')
} else { message('try again </3') }
然后,如果您需要实际评估字符串,则可以使用eval(parse(text=output_string))
,确保其中包含的所有变量都具有值:
x <- 5
eval(parse(text=output_string))
## -0.4384354