函数不';t变化值(R)

函数不';t变化值(R),r,function,sapply,R,Function,Sapply,我写了一个函数,它有两个参数,一个是0:16之间的数字,另一个是包含四个参数值的向量。 如果我改变向量中的参数,函数的输出会改变,但是如果我改变0:16之间的数字,它不会改变 我可以补充一点,我遇到问题的函数包括另一个函数(称为'pi'),它采用相同的参数。 我已经检查过,如果我从0:16更改值,“pi”函数确实会更改值(如果我更改参数的值,它也会更改) 首先,这是我的代码 pterm_ny <- function(x, theta){ (1-sum(theta[1:2]))*(theta

我写了一个函数,它有两个参数,一个是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]))
}
我曾尝试在代码中这样做,但也没用。 我不记得这样做的理由,但我希望这样做是为了确保括号中的数字被解释为整数

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

sapply(c(0:16),pterm_ny,theta = c(0.2,0.2,2,2))
我真的希望有人能指出我在这里遗漏了什么


提前,谢谢

在主表达式和
pi()
函数中都有一个
theta[4]^x
术语;这些将被取消,使结果对
x
中的更改保持不变

此外:

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

在主表达式和
pi()
函数中都有一个
theta[4]^x
项;这些项将被取消,使结果对
x
中的更改保持不变

此外:

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

这是因为
theta[3]
等于
theta[4]
,所以这些术语会被抵消。如果这些值不相等,尝试一下,你确实会得到不同
x
@AndrewGustar的不同结果。谢谢!这与Ben的回答相结合,对我来说已经做到了!我应该注意到了!这是因为
theta[3]
等于
θ[4]
,所以这些术语会被抵消。如果这些值不相等,尝试一下,你确实会得到不同的
x
@AndrewGustar的不同结果。谢谢!这与Ben的回答相结合,对我来说已经做到了!我应该注意到了!谢谢你指出,我现在可以看到它了。只是想澄清一下,它不是θ[4]^这两个项都抵消了,但提高到x的幂的效果,因为它发生在分母项和分子项的大小相同,对吗?谢谢你指出,我现在可以看到它了。澄清一下,它不是θ[4]^这两个项都抵消了,但是提高到x的幂的效果,因为它发生在分母项和分子项的大小相同,对吗?
sapply(c(0:16),pterm_ny,theta = c(0.2,0.2,2,2))