Tôi cố gắng để tính toán số lượng các mục phổ biến trong các yếu tố của một danh sách:Một chức năng tổng quát hơn về số lượng phù hợp với các yếu tố trong những yếu tố n của một danh sách
temp<-list(element1=c("a","b","c"), element2=c("b","c","d"),
element3=c("d","e","f"), element4=c("a","c","z"))
Để có được sự chồng chéo giữa tất cả kết hợp cặp của các yếu tố, chức năng này hoạt động:
calculate.overlap.2<-function(y){
pw<-combn(y,2,FUN=function(x)sum(x[[1]]%in%x[[2]]))
names(pw)<-combn(y,2,FUN=function(x)paste(names(x)[[1]],names(x)[[2]],sep="-"))
return(pw)
}
Để có được sự chồng chéo giữa tất cả các kết hợp ba chiều của các yếu tố, chức năng này hoạt động:
calculate.overlap.3<-function(y){
pw<-combn(y,3,FUN=function(x)sum(x[[1]]%in%x[[2]]&x[[1]]%in%x[[3]]))
names(pw)<-combn(y,3,FUN=function(x) paste(names(x)[[1]],names(x)[[2]],names(x)[[3]],sep="-"))
return(pw)
}
nhưng như bạn có thể nói từ những con số bên trong hàm, đây không phải là một giải pháp thanh lịch.
Thật tuyệt vời khi khái quát hóa hai hàm này thành một hàm và có chức năng lấy làm đầu vào cho các phần tử trong mỗi lần kiểm tra trùng lặp. Tức là, đầu vào của number.of.elements.per.comparison=2
sẽ tương đương với calculate.overlap.2
ở trên và đầu vào cho hàm number.of.elements.per.comparison=3
sẽ giống như calculate.overlap.3
.
Tôi cảm thấy như có một giải pháp rất thanh lịch cho điều này, nhưng tôi không thể nhìn thấy nó.
Bạn đã xem mã trong hàm đó chưa? Giải pháp của Roland tốt hơn nhiều. –
Chỉ khi tất cả những gì anh ta muốn là NUMBER mục phổ biến. Nếu, bằng bất kỳ phương tiện nào, anh ta muốn biết mục nào nằm trong mỗi giao lộ, anh ta không thể. Hàm 'calculate.overlap' từ gói 'VennDiagram' cho điều đó. Vì vậy, 'venn (x) - attr (x, "intersections")' từ gói 'gplots'. – Drizzt