R语言curve()函数报错:'expr'未生成长度为'n'的对象及语法问题
R图形计算器的报错修复方案
问题与现有代码
尝试用R开发一款图形计算器,接收文本输入并绘制对应曲线,编写的代码如下:
output$plot1 <- renderPlot({ tempTxt2 <- parse(text=input$userTxtVar) f1 <- function(x){ return(tempTxt2) } curve(expr = f1, from =-3, to =3) })
运行时遇到两个问题:
- 通用运行错误:
'expr' did not evaluate to an object of length 'n' - 输入
3x时触发语法错误:
<text>:1:2: unexpected symbol 1: 3x ^
问题根源与修复思路
1. 函数返回值不匹配curve要求
curve需要传入的函数能对输入的向量x逐元素计算,返回等长的结果。当前代码里的f1直接返回解析后的表达式,没有代入x进行实际计算,导致curve无法识别有效计算结果。
2. R不支持省略乘号的数学简写
用户输入的3x是数学里的常见写法,但R语法要求乘号*必须显式写出,否则会被判定为语法错误,需要先对输入文本做预处理,自动补全省略的乘号。
修复后的完整代码
output$plot1 <- renderPlot({ # 预处理输入:自动补全数字后跟字母/左括号时省略的乘号 processed_input <- gsub("(\\d)([a-zA-Z(])", "\\1*\\2", input$userTxtVar) # 解析处理后的合法表达式 calc_expr <- parse(text = processed_input) # 定义能正确计算的函数:将x代入表达式求值 f1 <- function(x) { eval(calc_expr, envir = list(x = x)) } # 绘制曲线 curve(expr = f1, from = -3, to = 3) })
修复效果说明
- 输入
3x会被自动转为3*x,解决语法错误; - 函数
f1现在会把每个x值代入表达式计算,返回和输入向量等长的结果,解决'expr' did not evaluate to an object of length 'n'的错误。
内容的提问来源于stack exchange,提问作者manzler.h
相关产品推荐
相关产品推荐

