2012-10-12 78 views
6

Lết Tôi có một mảng nhưfor() vòng lặp bước rộng

a <- seq(1, 100, 1) 

và tôi muốn chọn chỉ các yếu tố xảy ra mỗi 3 bước với một vòng lặp for() bắt đầu từ thứ hai, ví dụ 2, 5, 8, 11, v.v.

Tôi nên sử dụng for() trong trường hợp này như thế nào?

b <- NULL 
# for(i in 1:length(a)) { # Is there any additional argument? 
    # b[i] <- a[...] # Or I can just multiply 'i' by some integer? 
# } 

Cảm ơn,

+0

Bạn should't sử dụng một vòng lặp for cho – Dason

Trả lời

11

Sử dụng 3 làm giá trị cho by trong seq

for (i in seq(2, length(a), by=3)) {} 

> seq(2, 11, 3) 
[1] 2 5 8 11 
+0

này tôi là một chút bối rối bởi ngôn ngữ khác nhau, tôi đã cố gắng một cái gì đó như 'for (i trong 1: chiều dài (a); i + 3) {} 'và những thứ như vậy :) –

+0

Nếu bạn đang nghĩ như vậy, bạn sẽ kết thúc với mã R rất kém hiệu quả, ngay cả khi bạn tìm ra cách để làm điều đó trong R. Xem xét việc đăng một phần lớn hơn của vấn đề của bạn vào một câu hỏi khác, đặc biệt là nếu mã có vẻ chạy chậm. – John

3

Tại sao sử dụng for?

b <- a[seq(2,length(a),3)] 
+0

Lỗi của tôi, trong vấn đề ban đầu mà tôi muốn giải quyết, tôi không có lựa chọn nào khác ngoài việc sử dụng 'for()'; trong ví dụ SO tôi đã không tạo lại vấn đề ban đầu của mình, nhưng tôi đã chỉ định tôi muốn sử dụng 'for()'. –

+1

Nếu bạn thực sự phải sử dụng cho() thì bạn vẫn cần phải làm cho số lượng mã trong vòng lặp càng nhỏ càng tốt. Việc lựa chọn chuỗi trong ví dụ for() thực sự nằm ngoài vòng lặp. Bạn nên suy nghĩ như thế này càng nhiều càng tốt để tối ưu hóa mã R của bạn. – John

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