为什么会这样:
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)
我猜问题是该除法给出了一个非整数。 如何让第二个工作? 我需要创建一个零矩阵,其大小根据方程式计算得出。
欢呼声
答案 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)