【问题标题】:Function doesn't change value (R)函数不改变值 (R)
【发布时间】:2018-03-12 20:37:17
【问题描述】:

我编写了一个函数,它接受两个参数,一个介于 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]))
}

对于 pterm_ny(i,c(0.2,0.2,2,2)) 返回 0.75,对于 i = 0 是 i = 1,...,16 和 0.2634,这告诉我指标函数在 ' pi' 确实有效。

关于将数字提高到一定的幂,有人告诉我应该将希望的数字包裹在“I”中,例如它会像这样;

x^I(2)

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

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

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

我真的希望有人能指出我在这里缺少的东西。

提前谢谢!

【问题讨论】:

  • 因为theta[3] 等于theta[4],所以条款取消了。尝试使用这些不相等的值,您确实会为不同的x 得到不同的结果。
  • @AndrewGustar 谢谢!这与本的回答相结合,为我做到了!我应该注意到了!

标签: r function sapply


【解决方案1】:

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

还有:

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

【讨论】:

  • 谢谢指出,我现在可以看到了。只是为了澄清一下,不是 theta[4]^x 在两个术语中都抵消了,而是从提高到 x 的幂的效果,因为它发生在分母中的两个术语和分子,对吧?
猜你喜欢
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-14
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
相关资源
最近更新 更多