绘图时如何获得某些东西的西格玛?

How to have sigma of something while plotting?

我在 R 中使用 mosaic 包的 plotFun 函数。我正在尝试绘制 3D 图。以下是我的代码片段:

plotFun(2*l*(w/log(beta*kspill*lambda^2+(1+(w/x-w)/10)*(lambda^2*5+lambda^1*5+1))+(w/x-w)/log((1+((w/x-w)/10)^1)*(lambda^2*5+lambda^1*5+1))) ~ x  & lambda ,
        x.lim=range(0.8,1), lambda.lim=range(1,3),
        l=60,w=40,kspill=10,f=1,beta=0.5,surface=TRUE)

这工作正常。现在假设我想修复 lambda 并引入一个新变量 t 这样如果 t=2 我们得到 lambda^2*5+lambda^1*5+1 就像上面的例子一样。如果 t=3 我们得到 lambda^3*5+lambda^2*5+lambda^1*5+1 等等。所以现在我有一个固定的 lambda t.lim=range(1,3) :

plotFun(2*l*(w/log(beta*kspill*lambda^2+(1+(w/x-w)/10)*("depends on t"))+(w/x-w)/log((1+((w/x-w)/10)^1)*("depends on t"))) ~ x  & lambda ,
        x.lim=range(0.8,1), t.lim=range(0.5,1),
        l=60,w=40,kspill=10,f=1,beta=0.5,lambda=1,surface=TRUE)

上面"depends on t"部分写什么。我想我们不能在那里放一个 for 循环来计算 5* {summation i=0 to i=t}lambdai。如何去做?

您可以用

定义您的"depends on t"

depends_on_t <- makeFun(5 * sum(lambda^(1:round(t))) + 1 ~ t + lambda, lambda = 1)

但是您还有一些问题需要解决:

1) 您的 plotFun() 命令正在使用 xlambda 创建绘图,但我猜您的意思是 xt

2) t 只能是一个整数,如果你打算在你建议的类型的总和中使用它的话。但是您正在创建一个假设轴为连续变量的图。我插入 round(t) 作为在计算总和之前从实数值移动到整数值的一种方法。这使得该函数适用于 non-integer 个值,但它可能不是您真正想要的。

最后,补充几点建议:

3) x & lambda 应替换为 x + lambda& 这里的使用可以追溯到 mosaic 包的早期,虽然它仍然受到支持(我想,我们不再真正测试它了),但我们更喜欢 x + lambda.

4) 我建议将函数的定义与 plotFun() 命令分开。您可以使用 mosaic::makeFun() 如上所述,或通常的 function() 来定义您的函数以及您希望其参数使用的任何默认值。然后您可以对该函数进行健全性检查,或者在多个图中使用它,而不是在每个图中包含所有函数的定义。

5) 使用空格和 returns 会使您的代码更具可读性。 (将您的示例简化为一个最小的示例来演示您所询问的问题。)

6) 我想你可能想要

depends_on_t <- makeFun(5 * sum(lambda^(0:round(t))) ~ t + lambda, lambda = 1) 而不是你描述的公式,但没有更多的上下文,我真的不知道。