函数不改变值 (R)

Function doesn't change value (R)

我编写了一个带有两个参数的函数,一个介于 0:16 之间的数字和一个包含四个参数值的向量。 如果我更改向量中的参数,函数的输出会发生变化,但如果我更改 0:16.

之间的数字,它不会改变

我可以补充一点,我遇到问题的函数包括另一个采用相同参数的函数(称为 'pi')。 我已经检查过,如果我从 0:16 更改值,'pi' 函数确实会更改值(如果我更改参数值,它也会更改)。

首先,这是我的代码;

pterm_ny <- function(x, theta){
(1-sum(theta[1:2]))*(theta[4]^(x))*exp((-1)*theta[4])/pi(x, theta)
}

pi <- function(x, theta){
theta[1]*1*(x==0)+theta[2]*(theta[3]^(x))*exp((-1)*(theta[3]))+(1-
sum(theta[1:2]))*(theta[4]^(x))*exp((-1)*(theta[4]))
}

returns 0.75 对于 pterm_ny(i,c(0.2,0.2,2,2)),i = 1,...,16 和 0.2634 对于 i = 0,这告诉我 'pi' 中的指标函数部分确实有效。

关于将数字提升到某个次方,我被告知应该将希望的数字包裹在 'I' 中,例如它会像;

x^I(2)

我曾尝试在我的代码中这样做,但这也无济于事。 我不记得这样做的理由,但我希望这是为了确保括号中的数字被解释为整数。

我的最终目标是获得 'pterm' 的 17 个不同值,为了实现这一点,我正在考虑像这样使用 sapply 函数;

sapply(c(0:16),pterm_ny,theta = c(0.2,0.2,2,2))

我真的希望有人能指出我在这里遗漏了什么。

提前谢谢!

您的主表达式和 pi() 函数中都有一个 theta[4]^x 项;这些正在抵消,使结果不变 x ...

还有:

  • 您可能希望避免使用 pi 作为您的函数名称,因为它也是一个内置变量 (3.14159...) - 这有时会引起混淆
  • 有关使用 "as is" 函数 I() 保护权力的建议仅在公式中相关,例如在 lm() 中使用(线性回归)。 (它将用作 I(x^2),而不是 x^I(2)