我已經寫了下面的代碼生成包含什麼,對我來說,一個相當複雜的模式矩陣的矩陣。在這種情況下,我通過反覆試驗確定完成矩陣中有136行。R:創建未知的行數
我可以寫一個函數來計算提前矩陣的行數,但功能會有點複雜。在該示例中的行中的矩陣=((4×3 + 1)+(3 * 3 + 1)+(2 * 3 + 1)+(1×3 + 1))* 4
數有沒有簡單而有效的方法來創建矩陣R中沒有硬連線矩陣語句的行數?換句話說,有沒有一種簡單的方法讓R在使用for-loops時根據需要添加一行到矩陣?
我已經提出了一個解決方案,在每次通過循環使用rbind,但似乎有點令人費解,我想知道是否有可能是一個更容易的解決方案。
很抱歉,如果這個問題是多餘的前面一個問題。我找不到使用本網站上的搜索功能或今天使用互聯網搜索引擎的類似問題,但我認爲我在過去的某個地方發現了類似的問題。
下面是2套的實施例的代碼,一個使用rbind和其它我曾經試驗和誤差來設置nrow = 136提前。
感謝您的任何建議。
v1 <- 5
v2 <- 2
v3 <- 2
v4 <- (v1-1)
my.matrix <- matrix(0, nrow=136, ncol=(v1+4))
i = 1
for(a in 1:v2) {
for(b in 1:v3) {
for(c in 1:v4) {
for(d in (c+1):v1) {
if(d == (c+1)) l.s = 4
else l.s = 3
for(e in 1:l.s) {
my.matrix[i,c] = 1
if(d == (c+1)) my.matrix[i,d] = (e-1)
else my.matrix[i,d] = e
my.matrix[i,(v1+1)] = a
my.matrix[i,(v1+2)] = b
my.matrix[i,(v1+3)] = c
my.matrix[i,(v1+4)] = d
i <- i + 1
}
}
}
}
}
my.matrix2 <- matrix(0, nrow=1, ncol=(v1+4))
my.matrix3 <- matrix(0, nrow=1, ncol=(v1+4))
i = 1
for(a in 1:v2) {
for(b in 1:v3) {
for(c in 1:v4) {
for(d in (c+1):v1) {
if(d == (c+1)) l.s = 4
else l.s = 3
for(e in 1:l.s) {
my.matrix2[1,c] = 1
if(d == (c+1)) my.matrix2[1,d] = (e-1)
else my.matrix2[1,d] = e
my.matrix2[1,(v1+1)] = a
my.matrix2[1,(v1+2)] = b
my.matrix2[1,(v1+3)] = c
my.matrix2[1,(v1+4)] = d
i <- i+1
if(i == 2) my.matrix3 <- my.matrix2
else my.matrix3 <- rbind(my.matrix3, my.matrix2)
my.matrix2 <- matrix(0, nrow=1, ncol=(v1+4))
}
}
}
}
}
all.equal(my.matrix, my.matrix3)
這是'The R Inferno'的圈2的主題http://www.burns-stat.com/pages/Tutor/R_inferno.pdf你是對的,以避免不斷的綁定或綁定。 – 2012-03-04 15:44:37