在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中写双系列的主要内容,如果未能解决你的问题,请参考以下文章