在R中写双系列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在R中写双系列相关的知识,希望对你有一定的参考价值。

我是R的新手,我面临以下问题。我需要将表达式从Mathematica转换为R.在mathematica中,语法如下:

hc=-1.5;
g[x_]:=If[x<0,Ceiling[Abs[x]],Floor[x]];
Sum[f[i,j],{i,0,5},{j,0,i+Sign[hc]*g[hc]}] 

输出如下:

f[2,0]+f[3,0]+f[3,1]+f[4,0]+f[4,1]+f[4,2]+f[5,0]+f[5,1]+f[5,2]+f[5,3]

现在我试图在R中做同样的事情。因为我正在搜索如何这样做,我使用一个双重迭代来打印我将稍后总结的元素。

因此我写了

hcp = -1.5


ceil_floor = function (x) {
  if(x < 0) { 
    ceiling( abs(x))
    } else {
      floor(x)
    }
}

for (i in 0:5) {
  for (j in 0 : (i + (sign(hcp) * ceil_floor(hcp)))) {
    print( paste0(i,":",j) )
  }
}

打印:

[1] "0:0"
[1] "0:-1"
[1] "0:-2"
[1] "1:0"
[1] "1:-1"
[1] "2:0"
[1] "3:0"
[1] "3:1"
[1] "4:0"
[1] "4:1"
[1] "4:2"
[1] "5:0"
[1] "5:1"
[1] "5:2"
[1] "5:3"

这里的问题在于:0-0,1:0,0:-1,0:-2,1:-1。我没有负值的问题,因为y最终都将等于零,但我不应该得到0-0,1-0。我猜R的处理方式不同于for (i in 0:(-2))而不是mathematica。

有人可以帮忙吗?

答案

如果您查看Mathematica列表,如下所示:

Table[f[i, j], {i, 0, 5}, {j, 0, i + Sign[hc]*g[hc]}]

输出:

{{}, {}, {f[2, 0]}, {f[3, 0], f[3, 1]},
 {f[4, 0], f[4, 1], f[4, 2]}, {f[5, 0], f[5, 1], f[5, 2], f[5, 3]}}

您将看到,由于Mathematica的迭代器的工作方式,R代码生成的以下排列不存在,并且不包括在求和中。

[1] "0:0"
[1] "0:-1"
[1] "0:-2"
[1] "1:0"
[1] "1:-1"
另一答案

如果我理解正确,我相信你应该把它写成for (i in (-2):0)负值

以上是关于在R中写双系列的主要内容,如果未能解决你的问题,请参考以下文章

VS Code配置markdown代码片段

VS Code配置markdown代码片段

F28379D烧写双核程序(在线&离线)

Codeforces 1064 D - Labyrinth

r R有用的代码片段

r R有用的代码片段