功能不会改变价值(R)

时间:2017-10-01 16:06:10

标签: r function sapply

我编写了一个带有两个参数的函数,一个介于0:16之间的数字和一个包含四个参数值的向量。 如果我改变向量中的参数,函数的输出确实会改变,但是如果我在0:16之间改变数字,它就不会改变。

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

首先,这是我的代码;

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]))
}

对于pterm_ny(i,c(0.2,0.2,2,2))返回0.75,i = 1,...,16和0.2634,i = 0,这告诉我指标函数部分在& #39; PI&#39;确实有效。

关于将某个数字提高到一定的权力,我被告知应该将所希望的数字包装在一个“我”中,作为一个例子就是这样;

x^I(2)

我试图在我的代码中这样做,但这也没有帮助。 我无法记住这样做的论点,但我希望确保括号中的数字被解释为整数。

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

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

我真的希望有人可以指出我在这里失踪的东西。

提前,谢谢!

1 个答案:

答案 0 :(得分:2)

您的主要表达式和theta[4]^x函数中都有pi()个术语;这些正在取消,结果不变为x ...

中的更改

此外:

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