2010-06-15 40 views
10

Tôi muốn biết liệu có thực hiện chức năng foldLeft (và foldRight không?) Trong R.Chức năng FoldLeft có sẵn trong R không?

Ngôn ngữ được cho là có chức năng "định hướng" và do đó tôi nghĩ nên có một cái gì đó như thế này, nhưng tôi không thể tìm thấy nó trong tài liệu.

Đối với tôi, foldLeft chức năng áp dụng trên một danh sách và có chữ ký sau đây:

foldLeft[B](z : B)(f : (B, A) => B) : B 

Đây là vụ phải trả lại kết quả sau:

f(... (f(f(z, a0), a1) ...), an) if the list is [a0, a1, ..., an]. 

(tôi sử dụng định nghĩa của Scala List API)

Có ai biết nếu một hàm như vậy tồn tại trong R?

Trả lời

12

? Giảm. Cách sử dụng Giảm (f, x, init, phải = FALSE, tích lũy = FALSE)

+0

arf. Tôi biết tôi đã nhìn thấy nó ở đâu đó! Bạn có biết nếu có một gói dành riêng cho việc xử lý danh sách với các chức năng tối ưu không? hoặc tất cả chúng đã được thực hiện trong gói cơ sở và tôi không tìm thấy chúng? – SRKX

1

Nếu bạn muốn có một vector của kết quả, điều này sẽ làm việc:

foldl = function(f, v, x) {w = v; for (i in 1 : length(v)) { x = w[[i]] = f(x, v[[i]]) }; w } 

Bây giờ bạn có thể xác định lại cumsum như

cumsum(v) = foldl(function(x,y) { x+y }, v, 0) 

Để cải thiện nó, bạn nên xử lý các giá trị bị thiếu như Reduce.

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