Tôi đã viết mã bên dưới để tạo ma trận có chứa những gì, với tôi, một mẫu khá phức tạp. Trong trường hợp này, tôi xác định rằng có 136 hàng trong ma trận đã hoàn thành bằng thử và sai.R: tạo ma trận với số hàng không rõ
Tôi có thể viết một hàm để tính toán số lượng hàng ma trận trước, nhưng hàm sẽ phức tạp một chút. Trong ví dụ này, số hàng trong ma trận = ((4 * 3 + 1) + (3 * 3 + 1) + (2 * 3 + 1) + (1 * 3 + 1)) * 4.
Có cách nào dễ dàng và hiệu quả để tạo ma trận trong R mà không cần phải cố định dây số hàng trong câu lệnh ma trận? Nói cách khác, có cách nào dễ dàng để R đơn giản thêm hàng vào ma trận khi cần thiết khi sử dụng vòng lặp không?
Tôi đã trình bày một giải pháp sử dụng rbind tại mỗi lượt đi qua các vòng, nhưng điều đó có vẻ hơi phức tạp và tôi đã tự hỏi nếu có thể có một giải pháp dễ dàng hơn nhiều.
Xin lỗi nếu câu hỏi này dư thừa với câu hỏi trước đó. Tôi không thể tìm thấy một câu hỏi tương tự bằng cách sử dụng tính năng tìm kiếm trên trang web này hoặc sử dụng công cụ tìm kiếm trên internet ngày nay, mặc dù tôi nghĩ rằng tôi đã tìm thấy một câu hỏi tương tự ở đâu đó trong quá khứ.
Dưới đây là 2 bộ mã ví dụ, một bộ sử dụng rbind và một trong đó tôi đã sử dụng bản dùng thử và lỗi để đặt nrow = 136 trước.
Cảm ơn mọi đề xuất.
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)
này là chủ đề của Vòng 2 của 'The R Inferno' http://www.burns-stat.com/pages/Tutor/R_inferno.pdf Bạn có quyền tránh bị ràng buộc hoặc ràng buộc liên tục. –