为何R语言中curve函数无法直接使用列表提取的函数元素?
问题原因解析
这是因为curve()函数对第一个参数expr的处理逻辑特殊,它并非直接接收函数对象,而是先将传入的内容当作表达式进行解析:
- 当传入
f时,f是绑定到函数对象的变量名,curve()解析该表达式后会评估f得到函数对象,识别出这是合法的函数输入,因此正常执行。 - 当直接传入
m[[1]]时,curve()会先把m[[1]]当作一个列表索引的表达式来解析,这个表达式本身不包含curve()要求的符号x,所以触发报错,提示expr必须是函数、含x的调用或表达式。 - 先将
m[[1]]赋值给d再传入d,本质和传入f的逻辑一致:curve()解析d这个变量名,评估后得到函数对象,满足输入要求,因此可以正常运行。
你也可以通过curve(eval(m[[1]]))直接运行,eval()会提前将m[[1]]评估为函数对象,绕过curve()的表达式解析检查。
内容的提问来源于stack exchange,提问作者Maël
相关产品推荐
相关产品推荐

