R:为什么这不起作用?,矩阵,舍入错误?

时间:2010-10-08 15:29:14

标签: r matrix

为什么会这样:

ncota <- 1
nslope <- 29
resul <- matrix(rep(0,ncota*nslope*4),ncota*nslope,4)

但这不是吗?

ncota <- 1
sini <- 0.1; sfin <- 1.5; spaso <- 0.05; nslope <- 1+((sfin-sini)/spaso)
resul <- matrix(rep(0,ncota*nslope*4),ncota*nslope,4)

我猜问题是该除法给出了一个非整数。 如何让第二个工作? 我需要创建一个零矩阵,其大小根据方程式计算得出。

欢呼声

2 个答案:

答案 0 :(得分:5)

如果你要做的就是创建一个零矩阵,你不需要提供正确数量的零,只需提供一个零,让R将其循环到所需的长度:

matrix(0, ncota*nslope, 4)

第二个失败的原因是ncota * nslope * 4不完全是116:

> (ncota * nslope * 4) == 116
[1] FALSE
> all.equal(ncota * nslope * 4, 116)
[1] TRUE

all.equal表示这些等于,如果允许浮点错误。

?rep包括以下内容:

 Non-integer values of ‘times’ will be truncated towards zero.  If
 ‘times’ is a computed quantity it is prudent to add a small fuzz.

如果我们按原样说并添加一个小模糊,rep确实会提供所需数量的0:

> length(rep(0, times = ncota*nslope*4 + 0.00000001))
[1] 116

如Hadley所述(在评论中),可以使用zapsmall函数轻松添加此模糊:

> length(rep(0, times = zapsmall(ncota*nslope*4)))
[1] 116

答案 1 :(得分:1)

您无需使用rep。这很好用:

resul <- matrix(0,ncota*nslope,4)