2012-04-10 26 views
14

Đôi khi tôi quen với thiết kế của một gói R cụ thể và muốn tìm kiếm CRAN cho tất cả các gói của tác giả đó (hãy sử dụng Hadley Wickham chẳng hạn). Làm thế nào tôi có thể làm một tìm kiếm như vậy (tôi muốn sử dụng R nhưng điều này không phải là chế độ tìm kiếm).Tìm kiếm một gói bởi một tác giả cụ thể

+0

Tôi nghĩ bài này http://stackoverflow.com/ question/8722233/available-packages-by-publication-date có các thành phần cơ bản mà bạn cần ... –

+2

Tôi đã đăng một câu hỏi tương tự cách đây vài ngày (http://stackoverflow.com/questions/10032079/crantastic-p ackages-sắp xếp theo số lượng người dùng) nhưng nó đã nhanh chóng bị đóng vì không phải là một câu hỏi lập trình thực sự. Tôi hy vọng bạn sẽ may mắn hơn tôi (phải thừa nhận rằng, từ ngữ của bạn tốt hơn nhiều so với tôi!). Nếu bạn quan tâm đến một giải pháp R, tôi đã đăng một bài viết có mã để cạo (một số) dữ liệu của crantastic vào một data.frame tại http://r-de-jeu.blogspot.com/2012/04/50- most-used-r-packages.html. – flodel

+0

Tôi đã xóa câu trả lời được đăng trong câu hỏi và thêm câu trả lời đó vào câu trả lời do @DWin cung cấp. Xin đừng trả lời câu hỏi của bạn bên trong câu hỏi - điều này quá khó hiểu. Nếu câu trả lời được đăng không hoàn toàn đạt được điều đó, hãy đăng và chấp nhận câu trả lời của riêng bạn. – Andrie

Trả lời

10

Crantastic can search by author. Bạn có thể làm nhiều hơn một chút với crantastic nhưng chức năng bạn đang tìm kiếm đã được cung cấp ở đó.

+0

Điều đó có tác dụng nhưng tôi dường như không thể tìm kiếm nhưng phải tìm kiếm trong danh sách các gói cho đến khi tôi tìm thấy gói của tác giả tôi muốn và sau đó tôi có thể nhấp vào tên của họ. Nếu tôi sử dụng nó sai cho tôi biết. Ví dụ: nếu tôi tìm kiếm [dbConnect] (http://crantastic.org/packages/dbConnect) Tôi có thể tìm thấy tác giả đó và nhấp vào tên của anh ấy nhưng tôi dường như không thể nhập "Kurkiewicz" (tác giả của dbConnect) vào thanh tìm kiếm và trả lại gói của mình. Nếu đây là cách tiếp cận tốt nhất nó sẽ làm nhưng có vẻ như có một cách tốt hơn hoặc có thể tôi đang làm sai. –

+0

Tôi đoán tôi đã không thực sự thử thanh tìm kiếm mà không xuất hiện để tìm kiếm thông qua các nhà bảo trì gói. Trên trang đó tôi chỉ làm một Ctrl-f đơn giản và tìm kiếm trang theo cách đó. – Dason

+0

không biết về Ctrl + f Điều đó hoạt động. Phản ứng đầu tiên và có lẽ là nhanh nhất cho đến nay được kiểm tra. –

8

Phỏng theo available.packages by publication date:

## restrict to first 100 packages (by alphabetical order) 
pkgs <- unname(available.packages()[, 1])[1:100] 
desc_urls <- paste(options("repos")$repos,"/web/packages/", pkgs, 
    "/DESCRIPTION", sep = "") 
desc <- lapply(desc_urls, function(x) read.dcf(url(x))) 
authors <- sapply(desc, function(x) x[, "Author"]) 

Kể từ khi tôi là một sự tự khen (và Hadley Wickham không có gói trong 100 đầu tiên):

pkgs[grep("Bolker",authors)] 
# [1] "ape" 

Vấn đề chính với giải pháp này là làm nó cho thực tế (thay vì chỉ cho 100 gói đầu tiên) có nghĩa là nhấn CRAN 3000+ lần cho thông tin gói ...

chỉnh sửa: một giải pháp tốt hơn, dựa trên giải pháp Jeroen oom trong cùng một vị trí:

recent.packages.rds <- function(){ 
    mytemp <- tempfile() 
    download.file(paste0(options("repos")$repos,"/web/packages/packages.rds"), 
        mytemp) 
    mydata <- as.data.frame(readRDS(mytemp), row.names=NA) 
    mydata$Published <- as.Date(mydata[["Published"]]) 
    mydata 
} 

mydata <- recent.packages.rds() 
unname(as.character(mydata$Package[grep("Wickham",mydata$Author)])) 
# [1] "classifly" "clusterfly" "devtools"  "evaluate"  "fda"   
# [6] "geozoo"  "ggmap"  "ggplot2"  "helpr"  "hints"  
# [11] "HistData"  "hof"   "itertools" "lubridate" "meifly"  
# [16] "memoise"  "munsell"  "mutatr"  "normwhn.test" "plotrix"  
# [21] "plumbr"  "plyr"   "productplots" "profr"  "Rd2roxygen" 
# [26] "reshape"  "reshape2"  "rggobi"  "roxygen"  "roxygen2"  
# [31] "scales"  "sinartra"  "stringr"  "testthat"  "tourr"  
# [36] "tourrGui" 
+2

Mã nên đi đến gói 'vận may '. Q: bạn sẽ nhận được gì nếu bạn grep Bolker trong các tác giả gói R? A: Một con khỉ. –

+0

Cảm ơn Ben. Chắc chắn là một cách tiếp cận nhưng như bạn chỉ ra mất một khoảng thời gian đáng kể. Cách tiếp cận của Dason có khả năng hiệu quả nhất.Cảm ơn các giải pháp R :) –

+0

kiểm tra phiên bản cập nhật ... –

11

Không chính xác của tác giả nhưng có lẽ truy cập bằng cách duy trì cũng sẽ có ích?

http://cran.r-project.org/web/checks/check_summary_by_maintainer.html#summary_by_maintainer

EDIT bởi Tyler Rinker

gợi ý DWin có thể được đưa đến thành hiện thực với những dòng mã:

search.lib <- function(term, column = 1){ 
    require(XML) 
    URL <- "http://cran.r-project.org/web/checks/check_summary_by_maintainer.html#summary_by_maintainer" 
    dat <-readHTMLTable(doc=URL, which=1, header=T, as.is=FALSE) 
    names(dat) <- trimws(names(dat)) 
    dat$Maintainer[dat$Maintainer == ""] <- NA 
    dat$Maintainer = zoo::na.locf(dat$Maintainer) 
    if (is.numeric(column)) { 
     dat[agrep(term, dat[, column]), 1:3] 
    } else { 
     dat[agrep(term, dat[, agrep(column, colnames(dat))]), 1:3] 
    } 
} 

search.lib("hadley") 
search.lib("bolker") 
search.lib("brewer", 2) 
+0

DWin Tôi đã đăng chỉnh sửa (giải pháp) cho câu hỏi của tôi bằng cách sử dụng đề xuất +1 –

+0

Do hàng trống, chỉ gói đầu tiên theo thứ tự bảng chữ cái của từng tác giả đã được trả về --- có thể do định dạng cập nhật trên trang web? Đã chỉnh sửa để điền vào các giá trị bị thiếu và trả lại tất cả các kết quả. – Gregor

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