나는 꽤 복잡한 패턴을 포함하는 행렬을 생성하기 위해 아래 코드를 작성했습니다. 이 경우 나는 시행 착오를 거쳐 완성 된 행렬에 136 행이 있다고 판단했습니다.R : 알 수없는 행 수의 행렬 만들기
미리 행렬 수를 계산하는 함수를 작성할 수는 있지만 함수는 약간 복잡 할 수 있습니다. 이 예에서 행렬의 행 수 = ((4 * 3 + 1) + (3 * 3 + 1) + (2 * 3 + 1) + 1 * 3 + 1) * 4
행렬의 행 수를 하드 와이어하지 않고 R에서 행렬을 생성하는 쉽고 효율적인 방법이 있습니까? 즉, for-loops를 사용할 때 R이 필요에 따라 행렬에 행을 추가하는 쉬운 방법이 있습니까?
나는 루프를 통과 할 때마다 rbind를 사용하는 하나의 솔루션을 제시했지만 약간 복잡한 데다가 훨씬 쉬운 솔루션이 있는지 궁금해하고 있습니다.
이 질문이 이전 질문과 중복되는 경우 죄송합니다. 나는이 사이트에서 검색 기능을 사용하거나 인터넷 검색 엔진을 사용하여 유사한 질문을 찾지 못했습니다. 과거와 비슷한 질문을 찾았습니다.
다음은 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 지속적인 rbinding이나 cbinding을 피하는 것이 옳습니다. –