2012-03-13 37 views
5

Tôi đang cố gắng lưu dữ liệu từ một vòng lặp kiểm tra lôgíc.Vòng lặp trong R: cách lưu kết quả đầu ra?

Vì vậy, tôi có các dữ liệu sau:

T1 <- matrix(seq(from=100000, to=6600000,length.out=676),26,26) # a matrix of 26X26 - here with illustrive values 

minmax <- seq(from=1,to=49,by=1) # creates a sequence 
Fstep <- 6569141.82/minmax  # define a vector from 0 to 6569141.82 with 49 divisions 
F <- rev(round(Fstep,0))   # round the vector values and re order them 
F 

Tôi đã runned vòng lặp sau

for (i in 1:49) { 
    print(T1 > F[i]) # I used print to see the results in the screen 
} 

vòng lặp này trả tôi 49 ma trận được điền vào với giá trị logic (True hoặc sai). Mỗi ma trận là phép so sánh T1 với mỗi 49 vị trí F [i] (F [1], ...., F [49])

Tôi cần có các giá trị trong các ma trận đó để tiếp tục sử dụng ma trận kề cho các lô mạng. Tuy nhiên, khi tôi không thể gán các giá trị logic đó cho một ma trận, không lưu chúng vào các giá trị csv bằng cách sử dụng "write.matrix".

Vì vậy, tôi cần phải có 49 - ma trận "W" được điền bằng các giá trị logic (T hoặc F). Tôi đã có những giá trị đó bởi vòng lặp ở trên nhưng tôi không thể lấy nó như một đối tượng hoặc như một bộ sưu tập của csv. các tập tin.

tôi đã cố gắng

W<-matrix(0,26,26) #create an empty matrix to assign the logical arguments 
for (i in 1:49){ 
    W[i] <- T1>F[i] # I used print to see the results in the screen 
} 

mà trả về cảnh báo sau đây

Warning messages: 
1: In W[i] <- (T1 > F[i]) : 
    number of items to replace is not a multiple of replacement length 

Tôi cũng đã cố gắng một môi trường khác, trong đó tất cả các ma trận tôi so sánh có cùng kích thước.

create.M <- function(F){ # a function to transform each position F[i] into a 26X26 matrix 
    for (i in 1:49) { 
    matrix(F[i],26,26) 
    } 
} 

Loop.T1 <- function(T1){ # a function to replicate T1(49 times) 
    for (i in 1:49) { 
    T1 
    } 
} 

và so sánh hai kết quả đầu ra

Loop.T1(T1)>create.M(F) 

trả về

logical(0) 
+0

Nếu bạn đang đi để sử dụng cho-vòng bạn cần phải học chuyển nhượng đó là cần thiết trong vòng lặp. Nếu không thì không có gì bền "xảy ra". –

Trả lời

7

cửa hàng mỗi boolean ma trận như một mục trong một danh sách:

result <- vector("list",49) 
for (i in 1:49) 
{ 
    result[[i]] <- T1>F[i] # I used print to see the results in the screen 
} 

#Print the first matrix on screen 
result[[1]] 
6

Một cách khác để làm những gì joran gợi ý là với chúng tôi e áp dụng gia đình của các chức năng.

result2 <- lapply(F, function(f) {T1 > f}) 

Điều này cho phép điều tương tự như Joran của result, một danh sách mà mỗi phần tử tương ứng với một trong các giá trị của F và yếu tố đó là một ma trận logic 26x26.

Một giải pháp thay thế khác là lưu trữ kết quả dưới dạng ma trận lôgic ba chiều (49 * 26 * 26) trong đó mỗi lát tương ứng với một trong các giá trị của F.

result3 <- sapply(F, function(f) {T1 > f}, simplify="array") 

cấu trúc trong số đó là

> str(result3) 
logi [1:26, 1:26, 1:49] FALSE FALSE FALSE FALSE TRUE TRUE ... 
+1

Tuyệt vời Brian. Result2 hoạt động tốt! Tôi sẽ đi xa hơn trong tài liệu của gia đình áp dụng và cú pháp của nó. –

Các vấn đề liên quan