2011-02-07 41 views
12

Có điều gì giống như một thành phần chức năng trong R?Chức năng Thành phần trong R (và chức năng mức cao)

Tôi nghĩ rằng trong haskell nó somthing như "(.)" Và trong agda đó là nhà điều hành vòng.

Ngoài ra, tôi tìm thấy thông tin litte về lập trình hàm cao cấp trong R. Tôi đã tìm thấy hàm "Giảm", "Bản đồ", "Bộ lọc" ..., có nhiều hơn không? Bất kỳ con trỏ?

+1

Để có được một số gợi ý thực sự hữu ích về chức năng lập trình, hãy xem câu trả lời này cho câu hỏi trước: http://stackoverflow.com/questions/4874867/learning-functional-programming-with-r/4887648#4887648 – Andrie

Trả lời

8

Bạn có thể thực hiện chức năng ghép như thế này:

composite<-function(f,g) function(...) f(g(...)) 

f<-function(x) x+1; 
g<-function(x) x*2; 
composite(f,g)(7) 
composite(g,f)(7) 

hoặc làm nhà điều hành về điều này.

Về điểm thứ hai, có rất nhiều thứ như vậy; Tôi nghĩ rằng sử dụng nhiều nhất là * gia đình áp dụng (sapply, mapply, tapply, lapply, áp dụng ...).

+0

hi. Cảm ơn bạn đã trả lời. thêm một câu hỏi mà lỗi tôi là: làm thế nào tôi có thể sử dụng "f" như một phím tắt cho "chức năng"? giống như "g <- f (x) x * x" cho các định nghĩa hàm. – mrsteve

+0

@mrsteve: không (với rất nhiều hack đi đó là). Có vẻ như là một ý tưởng rất tồi với tôi. –

+0

@mrsteve Thật không may là - đây là từ khóa duy nhất trong R và, ***, 8 chữ cái. Mặt khác, lambda sẽ đẩy lùi "những người bình thường" và f sẽ gây nhầm lẫn ... – mbq

16

Gói functionalCompose chức năng mà khái quát đến bất kỳ số lượng các chức năng:

set.seed(123) 
x <- matrix(runif(100), 10, 10) 
mean(rowSums(scale(x))) 
# [1] 5.486063e-18 

library(functional) 
Compose(scale, rowSums, mean)(x) 
# [1] 5.486063e-18 

(Lưu ý rằng các chức năng được áp dụng từ trái sang phải.)

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