如何在R中存储值?我想要生成K
的四个值并将其存储在m[1]
中,因此我有m[1,1]
,m[1,2]
,m[1,3]
,m[1,4]
。然后生成K
的第二组四个值并存储在m[2]
中,以便m[2,1]
,m[2,2]
,m[2,3]
,m[2,4]
。我尝试了这个程序,但收到此错误消息:
1: In m[j] = Cp[1:4] :
number of items to replace is not a multiple of replacement length
2: In m[j] = Cp[1:4] :
number of items to replace is not a multiple of replacement length
k=numeric()
k[1]=0
for (j in 1:2) {
for (count in 1:3) {
k[count+1]=k[count]+rnorm(1,0,1)
}
m[j]=k[1:4]
}
答案 0 :(得分:1)
您的行是正态分布的样本的累积总和;你可以通过以下方式得到这个:
set.seed(144)
t(sapply(1:2, function(row) c(0, cumsum(rnorm(3, 0, 1)))))
# [,1] [,2] [,3] [,4]
# [1,] 0 -1.650556 -1.047746 -1.521630
# [2,] 0 -1.797613 -3.218734 -3.059847
答案 1 :(得分:1)
虽然josilber的答案很好地放在R-speak中(我建议使用它),但要理解为什么你的代码无法正常使用以下内容。
m在循环之前的任何地方都没有定义,但假设它被定义为数字(),就像k一样,这意味着它是一个向量。
您拨打电话
m[j]<-k[1:4]
当使用单个括号对矢量进行子集时,在您的示例中,它实质上将返回m [j](这是一个数字),并尝试将其替换为k [1:4](这是4个数字! )。
这并没有多大意义,所以R抱怨它。唯一可行的方法是,如果你试图用4个数字替换4个数字(事物必须与单个括号相同,或者实际上是彼此的倍数,但这涉及回收和我们可能不想进入这里)
您可以做的是将m定义为列表(m&lt; -list())然后您将调用更改为
m[[j]]<-k[1:4]
在R中,列表不关心单个元素的大小,每个插槽都是自己的桶。要访问存储桶,请使用双括号而不是单个。列表列表也有效!因此,如果您要使用列表列表,您将能够在您的问题中获得所需的二维方面,其中每个内部存储桶m [[i,j]]将等于关联的k [1 :4]