【问题标题】:R. function. errorR. 功能。错误
【发布时间】:2016-07-11 17:42:17
【问题描述】:

我有以下函数f

f <- function (n) if (n==0) 1 else f(n - 1)(n %% 2) - f(n-1)(n+1)

我认为它定义正确但我无法计算 f(8)

f(8)

> Error in f(n - 1) : attempt to apply non-function

我需要改变什么?

【问题讨论】:

  • 您正在尝试在 f(n) 的函数定义中计算 f(n-1)。你是想构建一个递归函数还是什么?无论哪种方式,您的函数都没有正确定义。
  • 我的f(n)f(n - 1)(n %% 2) - f(n-1)(n+1)
  • 应该是乘法吗? f(n - 1)*(n %% 2) - f(n-1)*(n+1) 也许? f(8) # [1] 99225
  • 是的。 f(8) = f(8-1)*(8 %% 2).......

标签: r function


【解决方案1】:

在 R 中,递归没有得到很好的优化,但基本方法是使用 Recall 函数。目前尚不清楚您打算使用“双重调用”语法,例如f(n-1)(n+1) 其中 f 首先是一个括号,与一个参数配对,然后是另一个参数。 f 函数并非旨在返回函数。我猜测您希望 f(n) 中的递归关系为:

 f(n - 1)*(n %% 2) - f(n-1)*(n+1)  

如果猜对了,那么:

 f <- function (n) if (n==0) 1 else {Recall(n - 1) *(n %% 2) - Recall(n-1)*(n+1)}

> f(8)
[1] 99225

我在澄清 cmets 之前做出了我的猜测,但我认为你不明白 f(n)(n %% 2) 是不正确的 R 语法似乎是正确的。背靠背括号(英语中的括号)不是表示乘法,而是表示函数应用。查看?Syntax 并查看?ecdf 示例,其中ecdf(x)(n) 是可接受的嵌套调用,因为ecdf 将函数作为值返回。

【讨论】:

  • 评论不应该仅仅用来表示感谢,但应该.. 赞成和复选标记。
猜你喜欢
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 2011-12-29
  • 2011-11-15
相关资源
最近更新 更多