0

我在 R 中使用包的plotFun功能mosaic。我正在尝试绘制 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等等。所以现在我有t.lim=range(1,3)一个固定的 lambda :

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)

在上面的“取决于 t”部分写什么。我想我们不能在for那里放置一个循环来计算 5* {summation i=0 to i=t}lambda i。如何去做这件事?

4

1 回答 1

1

你可以定义你的“取决于 t”

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

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

1)您的命令正在使用andplotFun()创建一个情节,但我猜您的意思是and 。xlambdaxt

2)t如果您打算在您建议的类型的总和中使用它,则只能是整数。但是您正在创建一个假设轴的连续变量的图。在计算总和之前,我插入round(t)了一种从实数值转换为整数值的方法。使函数适用于非整数值,但它可能不是您真正想要的。

最后,补充几点建议:

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

4)我建议将函数的定义与plotFun()命令分开。您可以使用mosaic::makeFun()如上图所示,或通常function()定义您的函数和任何您想要的参数的默认值。然后你可以对函数进行完整性检查,或者在多个图中使用它,而不是在每个图中包含所有函数的定义。

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

6)我想你可能想要

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

于 2016-01-26T02:20:17.130 回答