2011-08-18 20 views
5

R của : có một số gotchas nổi tiếng:Làm thế nào tôi có thể thỏa mãn tai ương của mình với toán tử `:` của R? điều hành

a = c(1, 2, 3) 
set.zero = function(n) a[1:n] <<- 0 
set.zero(0) 
# `a` is now c(0, 2, 3) 

tôi chỉ có thể viết một hàm giải quyết điều này bằng cách làm 1:0 đưa ra một sản phẩm nào vector, nhưng tôi muốn nó nếu có một cách hợp lý ngắn gọn base hoặc CRAN gói cung cấp chức năng như vậy (lý tưởng thay thế : nếu đó không quá nguy hiểm). Tôi đã cố gắng tìm kiếm nhưng không thể tìm thấy nó.

Điều đó có tồn tại không?

Trả lời

6

Hãy thử điều này:

set.zero = function(n) a[seq_len(n)] <<- 0 

Lưu ý rằng seq(1, length = n) làm việc là tốt.

+0

Tốt. Mặc dù nó yêu cầu số học để tổng quát thành 'a: b'. – Owen

+1

@Owen Số học !? Kinh dị! Kinh dị! ;) – joran

+0

@Owen, Đã thêm một số thông tin về điều đó. –

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