Tôi là người dùng mới cho R và cho vòng lặp. Tôi đang cố gắng lấy mẫu từ dữ liệu và kiểm tra xem có cột colinear không. Tôi muốn ghi lại trong đó lặp đi lặp lại rằng cột colinear tồn tại và ghi lại nó trong vector (baditr). Ngoài ra, tôi muốn in một dòng cho biết rằng "colinearity là tại i iteration". Sau đó, tôi muốn mã nhảy tới lần lặp thứ hai và tiếp tục chạy. Đối với mỗi lần lặp, tôi muốn mã lưu tổng của các cột trong hàng tương ứng của ma trận.Chọn các hàng không có giá trị bị thiếu trong R
Vấn đề của tôi là tôi nhận được NA cho các lần lặp lại không tốt. Ý định của tôi là để lặp lại xấu không được bao gồm trong ma trận của tôi cả. Đây là mã của tôi:
a0=rep(1,40)
a=rep(0:1,20)
b=c(rep(1,20),rep(0,20))
c0=c(rep(0,12),rep(1,28))
c1=c(rep(1,5),rep(0,35))
c2=c(rep(1,8),rep(0,32))
c3=c(rep(1,23),rep(0,17))
da=matrix(cbind(a0,a,b,c0,c1,c2,c3),nrow=40,ncol=7)
sing <- function(nrw){
sm <- matrix(NA,nrow=nrw,ncol=ncol(da))
baditr <- NULL
for(i in 1:nrw){
ind <- sample(1:nrow(da), nrow(da),replace =TRUE)
smdat <- da[ind,]
evals <- eigen(crossprod(smdat))$values
if(any(abs(evals) < 1e-7)){
baditr <- c(baditr,i)
cat("singularity occurs at", paste(i),"\n")
next
}
sm[i,] <- apply(smdat,2,sum)
}
return(sm)
}
sing(20)
tôi sẽ nhận được kết quả như sau:
singularity occurs at 9
singularity occurs at 13
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 40 23 22 25 5 8 26
[2,] 40 20 18 30 4 7 22
[3,] 40 19 24 28 6 7 25
[4,] 40 19 22 30 6 9 26
[5,] 40 12 26 26 8 13 30
[6,] 40 17 16 27 7 10 19
[7,] 40 20 17 33 3 5 19
[8,] 40 22 19 28 4 9 23
[9,] NA NA NA NA NA NA NA
[10,] 40 21 24 28 3 6 27
[11,] 40 21 16 31 2 4 22
[12,] 40 21 21 26 3 6 23
[13,] NA NA NA NA NA NA NA
[14,] 40 18 16 29 2 7 22
[15,] 40 24 18 30 6 9 21
[16,] 40 23 18 29 4 8 21
[17,] 40 17 25 25 3 8 29
[18,] 40 22 28 23 9 14 30
[19,] 40 25 23 25 7 11 30
[20,] 40 20 23 27 7 10 26
Tôi muốn ma trận của tôi trông như thế này:
singularity occurs at 9
singularity occurs at 13
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 40 23 22 25 5 8 26
[2,] 40 20 18 30 4 7 22
[3,] 40 19 24 28 6 7 25
[4,] 40 19 22 30 6 9 26
[5,] 40 12 26 26 8 13 30
[6,] 40 17 16 27 7 10 19
[7,] 40 20 17 33 3 5 19
[8,] 40 22 19 28 4 9 23
[10,] 40 21 24 28 3 6 27
[11,] 40 21 16 31 2 4 22
[12,] 40 21 21 26 3 6 23
[14,] 40 18 16 29 2 7 22
[15,] 40 24 18 30 6 9 21
[16,] 40 23 18 29 4 8 21
[17,] 40 17 25 25 3 8 29
[18,] 40 22 28 23 9 14 30
[19,] 40 25 23 25 7 11 30
[20,] 40 20 23 27 7 10 26
Như một không an toàn, tôi sẽ cũng đánh giá cao bất kỳ thông tin nào bạn có thể có về lưu một số lần lặp nhất định vào một tệp (ví dụ: 50 lần lặp), mà tôi có thể ghi đè khi số lần lặp tiếp theo được tạo. Có nghĩa là, tôi lưu 50 lần lặp đầu tiên vào một tệp và sau đó khi vòng lặp thứ hai của 50 lần lặp được tạo, chúng ghi đè vòng đầu tiên và kết quả là tệp của tôi hiện có 100 lần lặp.
Xin lỗi vì bài đăng dài. Nhưng cảm ơn trước.
Nếu không nhìn vào các cơ chế chức năng, nếu bạn muốn trả về 'sm' không có' NA' giá trị, sau đó 'return (na.omit (sm))' sẽ làm thủ thuật – mnel
@mnel cảm ơn bạn Tôi quên mất lệnh này. bởi vì vấn đề chính của tôi là với lệnh tiếp theo trên mã ban đầu của tôi, tôi kiểm tra nếu có một collinearity trong dữ liệu để phù hợp hay không một mô hình, "do đó, điều kiện tôi áp đặt là nếu có collinearity cho tôi biết tại những gì iteration và không phù hợp với mô hình sau đó bắt đầu lặp lại tiếp theo ". cũng là vấn đề với việc lưu tập tin tại một số lần lặp nhất định. –