Làm thế nào để tổ chức các chương trình R lớn?


161

Khi tôi thực hiện một dự án R với bất kỳ sự phức tạp nào, các kịch bản của tôi nhanh chóng trở nên dài và khó hiểu.

Một số thực hành tôi có thể áp dụng là gì để mã của tôi luôn luôn là một niềm vui để làm việc với? Tôi đang nghĩ về những thứ như

  • Vị trí của các hàm trong tệp nguồn
  • Khi nào phá vỡ một cái gì đó ra một tập tin nguồn khác
  • Những gì nên có trong tập tin tổng thể
  • Sử dụng các chức năng như các đơn vị tổ chức (liệu điều này có đáng không khi R khiến việc truy cập trạng thái toàn cầu trở nên khó khăn)
  • Thực hành thụt dòng / ngắt dòng.
    • Đối xử (như {?
    • Đặt những thứ như)} trên 1 hoặc 2 dòng?

Về cơ bản, quy tắc ngón tay cái của bạn để tổ chức các tập lệnh R lớn là gì?


11
nên là wiki cộng đồng
SilentGhost

Bạn cũng có thể muốn xem xét các ProjectTemplategói.
ctbrown

Câu trả lời:


71

Câu trả lời tiêu chuẩn là sử dụng các gói - xem hướng dẫn sử dụng phần mở rộng Writing R cũng như các hướng dẫn khác nhau trên web.

Nó mang lại cho bạn

  • một cách tự động để tổ chức mã của bạn theo chủ đề
  • khuyến khích bạn viết một tập tin trợ giúp, khiến bạn suy nghĩ về giao diện
  • rất nhiều kiểm tra sự tỉnh táo thông qua R CMD check
  • cơ hội để thêm các bài kiểm tra hồi quy
  • cũng như một phương tiện cho không gian tên.

Chỉ cần chạy source()qua mã hoạt động cho các đoạn thực sự ngắn. Mọi thứ khác nên có trong một gói - ngay cả khi bạn không có kế hoạch xuất bản nó vì bạn có thể viết các gói nội bộ cho các kho lưu trữ nội bộ.

Về phần 'cách chỉnh sửa', hướng dẫn sử dụng R Internalscác tiêu chuẩn mã hóa R tuyệt vời trong Phần 6. Mặt khác, tôi có xu hướng sử dụng mặc định trong chế độ ESS của Emacs .

Cập nhật 2008-Aug-13: David Smith chỉ viết blog về các R Style Guide Google .


8
Nếu bạn đang phát triển cây / phân tích nguồn của mình một cách "hữu cơ", bạn có thấy điều này khó thực hiện / cồng kềnh không? Nếu bạn nhận thấy một lỗi trong mã của mình (phổ biến trong khi khám phá một không gian vấn đề mới), bạn phải (i) sửa lỗi nguồn; (ii) gói cài đặt lại; (iii) tải lại nó vào không gian làm việc của bạn? Có cách nào để gọi thư viện (...) để tải lại gói đã được tải (bước iii ở trên) không? Bạn không phải giết không gian làm việc của mình, khởi động lại R sau đó tải lại thư viện / gói của bạn để xem có đúng không?
Steve Lianoglou

1
Đang thử googling cho phong cách mã hóa R.
hadley

3
@SteveLianoglou Tôi biết điều này khá cũ nhưng gói devtools của Hadley giúp tải lại tất cả mã của bạn rất dễ dàng.
Dason

1
Bài đăng trên blog này cung cấp một hướng dẫn nhanh chóng thực sự tốt để xây dựng gói đầu tiên: hilaryparker.com/2014/04/29/wr-an-r-package-from-scratch
panterasBox

1
Đây là liên kết hoạt động với Hướng dẫn về Phong cách Google R
Denis Rasulev

51

Tôi thích đặt các chức năng khác nhau trong các tập tin riêng của họ.

Nhưng tôi không thích hệ thống gói của R. Nó khá khó sử dụng.

Tôi thích một giải pháp thay thế nhẹ, để đặt các chức năng của tệp trong một môi trường (thứ mà mọi ngôn ngữ khác gọi là "không gian tên") và đính kèm nó. Ví dụ: tôi đã tạo một nhóm các hàm 'tận dụng' như vậy:

util = new.env()

util$bgrep = function [...]

util$timeit = function [...]

while("util" %in% search())
  detach("util")
attach(util)

Đây là tất cả trong một tập tin util.R . Khi bạn tìm nguồn này, bạn sẽ có được môi trường 'tận dụng' để bạn có thể gọi util$bgrep()và như vậy; nhưng hơn nữa, attach()cuộc gọi làm cho nó trở nên công bằng bgrep()và trực tiếp như vậy. Nếu bạn không đặt tất cả các chức năng đó vào môi trường của riêng chúng, chúng sẽ gây ô nhiễm không gian tên cấp cao nhất của trình thông dịch (chức năng ls()hiển thị).

Tôi đã cố gắng mô phỏng hệ thống của Python, trong đó mỗi tệp là một mô-đun. Điều đó sẽ tốt hơn để có, nhưng điều này có vẻ ổn.


Cảm ơn, Brendan. Điều đó rất hữu ích. Có chuyện gì với vòng lặp while? Có gì sai với if (! ("Ut"% trong% search ())) đính kèm (produc)
Dan Goldstein

2
do đó, bạn có thể lặp đi lặp lại nguồn ("produc.R") nếu muốn chỉnh nó và như vậy.
Brendan OConnor

bạn không cần một vòng lặp thực sự - tất cả những gì bạn cần nó tách ra (tận dụng). Tôi không thể nhớ nó có lỗi hay không nếu nó chưa được tải, nhưng điều này là an toàn nhất và không hoạt động. đề nghị chào mừng.
Brendan OConnor

1
Tạo các môi trường cụ thể cho các chức năng và gắn nó là cách phù hợp với tôi. Một phương pháp khác để đạt được điều tương tự theo một cách khác (với nhiều mô đun hơn) là sử dụng sys.source: MyEnv <- attach(NULL, name=s_env); sys.source(file, MyEnv). Tôi thậm chí còn tuyên bố (trong môi trường của chính nó!) Khi khởi động một chức năng sys.source2sẽ tìm kiếm nếu một môi trường cùng tên đã ở đây và cung cấp chức năng này thay vì tạo một chức năng mới. Nó làm cho việc thêm các chức năng cá nhân trở nên nhanh chóng, dễ dàng và được tổ chức :-)
Antoine Lizée

5
Chỉ cần thấy điều này ngày hôm nay và nó áp dụng cho một gói thay thế: github.com/klmr/modules
ctbrown

34

Điều này nghe có vẻ hơi rõ ràng đặc biệt nếu bạn là một lập trình viên, nhưng đây là cách tôi nghĩ về các đơn vị mã và logic vật lý.

Tôi không biết đây có phải là trường hợp của bạn không, nhưng khi tôi làm việc ở R, tôi hiếm khi bắt đầu với một chương trình phức tạp lớn trong đầu. Tôi thường bắt đầu trong một tập lệnh và tách mã thành các đơn vị có thể phân tách logic, thường sử dụng các hàm. Mã thao tác và mã hóa dữ liệu được đặt trong các hàm riêng của chúng, v.v ... Và các hàm đó được nhóm lại với nhau trong một phần của tệp (thao tác dữ liệu ở trên cùng, sau đó trực quan hóa, v.v.). Cuối cùng, bạn muốn nghĩ về cách làm cho nó dễ dàng hơn để duy trì tập lệnh của bạn và giảm tỷ lệ lỗi.

Mức độ chi tiết / thô của bạn làm cho các chức năng của bạn sẽ khác nhau như thế nào và có nhiều quy tắc khác nhau: ví dụ: 15 dòng mã hoặc "một chức năng phải chịu trách nhiệm thực hiện một nhiệm vụ được xác định bởi tên của nó", v.v. . Vì R không hỗ trợ gọi theo tham chiếu, nên tôi thường thay đổi các chức năng của mình quá tốt khi nó liên quan đến việc chuyển các khung dữ liệu hoặc các cấu trúc tương tự xung quanh. Nhưng điều này có thể là sự bù đắp cho một số lỗi hiệu suất ngớ ngẩn khi tôi mới bắt đầu với R.

Khi nào trích xuất các đơn vị logic thành các đơn vị vật lý của riêng chúng (như các tệp nguồn và các nhóm lớn hơn như các gói)? Tôi có hai trường hợp. Đầu tiên, nếu tệp quá lớn và cuộn quanh các đơn vị logic không liên quan là một điều khó chịu. Thứ hai, nếu tôi có các chức năng có thể được sử dụng lại bởi các chương trình khác. Tôi thường bắt đầu bằng cách đặt một số đơn vị được nhóm, nói các hàm thao tác dữ liệu, vào một tệp riêng biệt. Sau đó tôi có thể nguồn tập tin này từ bất kỳ tập lệnh khác.

Nếu bạn sẽ triển khai các chức năng của mình, thì bạn cần bắt đầu suy nghĩ về các gói. Tôi không triển khai mã R trong sản xuất hoặc để người khác sử dụng lại vì nhiều lý do (một cách ngắn gọn: văn hóa org thích các ngôn ngữ khác, mối quan tâm về hiệu suất, GPL, v.v.). Ngoài ra, tôi có xu hướng liên tục tinh chỉnh và thêm vào bộ sưu tập các tệp có nguồn gốc của mình và tôi không muốn xử lý các gói khi tôi thực hiện thay đổi. Vì vậy, bạn nên kiểm tra các câu trả lời liên quan đến gói khác, như của Dirk, để biết thêm chi tiết về mặt trận này.

Cuối cùng, tôi nghĩ rằng câu hỏi của bạn không nhất thiết phải là R. Tôi thực sự khuyên bạn nên đọc Code Complete của Steve McConnell, trong đó có rất nhiều sự khôn ngoan về các vấn đề và thực tiễn mã hóa như vậy.


3
Nhận xét rất hữu ích, ars, cảm ơn bạn. Tôi là một lập trình viên, nhưng thật tốt khi kiểm tra với người khác. Khi bạn nói "Vì R không hỗ trợ gọi theo tham chiếu, tôi thường cảnh giác làm cho các chức năng của mình trở nên quá tốt", tôi nghe thấy bạn. Tôi đã quen viết các hàm như ReadData (); CleanData (); Phân tích dữ liệu(); GraphData (); và R làm cho nó cồng kềnh. Tôi thức dậy với ý tưởng rằng tôi cần sử dụng "nguồn" theo cách tôi sử dụng các chức năng trong các ngôn ngữ khác.
Dan Goldstein

2
Bạn nói đúng, Dan. Tôi thấy mình sử dụng "nguồn" theo cách đó cho các tác vụ chuẩn bị dữ liệu, vì vậy tôi chỉ có thể sử dụng một data.frame đã chuẩn bị trên các tập lệnh khác nơi phân tích thực sự được thực hiện. Tôi không bao giờ chắc chắn liệu đây có phải là một thực tiễn tốt hay không bởi vì nó chỉ cảm thấy kỳ lạ so với các ngôn ngữ khác - thực sự giống như kịch bản shell hơn. Thật tốt khi so sánh các ghi chú. :)
ars

Câu trả lời và ý kiến ​​tốt đẹp. Tôi thấy điều này đặc biệt khó chịu ở R, bởi vì bạn thường xuyên làm việc với dữ liệu ở định dạng cụ thể, do đó rất khó để viết các hàm có thể sử dụng lại. Vì vậy, bạn có viết mã chức năng tốt, mặc dù bạn biết nó sẽ không bao giờ được sử dụng lại, hoặc bạn chỉ viết mã thủ tục nhanh và khó chịu chỉ để đạt được hiệu quả cao hơn một chút với các đối tượng lớn? Một vấn đề nan giải .. R sẽ hoàn toàn tuyệt vời với tham chiếu cuộc gọi ..
naught101

Chà, nó có thể được thực hiện, đại loại thế , nhưng không có hiệu quả nào đạt được ...
n101 101

19

Tôi đồng ý với lời khuyên của Dirk! IMHO, tổ chức các chương trình của bạn từ các tập lệnh đơn giản đến các gói tài liệu là, để Lập trình trong R, giống như chuyển từ Word sang TeX / LaTeX để viết. Tôi khuyên bạn nên xem qua Gói Tạo R rất hữu ích : Hướng dẫn của Friedrich Leisch.


6
Gói trông hấp dẫn. Tuy nhiên, tôi lo lắng họ có thể là quá mức cần thiết. Tôi không viết mã mục đích chung. Hầu hết những gì tôi đang làm là kiểm tra giả thuyết này, kiểm tra giả thuyết đó, vẽ sơ đồ này, điều chỉnh các tham số cốt truyện, vẽ đồ thị đó, định hình lại dữ liệu, vẽ đồ thị đó. Tôi đang làm những thứ mà một khi đã hoàn thành, có lẽ sẽ không bao giờ được chạy lại.
Dan Goldstein

1
Trong trường hợp đó bạn nên có một cái nhìn về Sweave. Nó kết hợp mã R với LaTeX. Vì vậy, bạn có các phân tích và nguồn báo cáo với nhau.
Thierry

15

Câu trả lời ngắn gọn của tôi:

  1. Viết các chức năng của bạn một cách cẩn thận, xác định các đầu ra và đầu vào đủ chung;
  2. Hạn chế sử dụng các biến toàn cầu;
  3. Sử dụng các đối tượng S3 và, khi thích hợp, các đối tượng S4;
  4. Đặt các chức năng trong các gói, đặc biệt là khi các chức năng của bạn đang gọi C / Fortran.

Tôi tin rằng R ngày càng được sử dụng nhiều hơn trong sản xuất, vì vậy nhu cầu về mã tái sử dụng lớn hơn trước. Tôi thấy người phiên dịch mạnh mẽ hơn trước rất nhiều. Không có nghi ngờ rằng R chậm hơn 100-300x so với C, nhưng thông thường, nút cổ chai tập trung xung quanh một vài dòng mã, có thể được ủy quyền cho C / C ++. Tôi nghĩ sẽ là một sai lầm khi ủy thác những điểm mạnh của R trong thao tác dữ liệu và phân tích thống kê sang ngôn ngữ khác. Trong những trường hợp này, hình phạt hiệu suất là thấp, và trong mọi trường hợp cũng đáng để tiết kiệm trong nỗ lực phát triển. Nếu thời gian thực hiện một mình là vấn đề, chúng ta sẽ là người biên dịch.


11

Tôi đã có ý định tìm ra cách viết các gói nhưng không đầu tư thời gian. Đối với mỗi dự án nhỏ của tôi, tôi giữ tất cả các hàm cấp thấp của mình trong một thư mục có tên là 'Hàm /' và chuyển chúng vào một không gian tên riêng mà tôi tạo rõ ràng.

Các dòng mã sau đây sẽ tạo ra một môi trường có tên "myfuncs" trên đường dẫn tìm kiếm nếu nó không tồn tại (sử dụng tệp đính kèm) và điền vào đó các hàm có trong tệp .r trong thư mục 'Hàm /' của tôi (sử dụng sys.source). Tôi thường đặt các dòng này ở đầu tập lệnh chính của mình có nghĩa là "giao diện người dùng" mà từ đó các hàm cấp cao (gọi các hàm cấp thấp) được gọi.

if( length(grep("^myfuncs$",search()))==0 )
  attach("myfuncs",pos=2)
for( f in list.files("functions","\\.r$",full=TRUE) )
  sys.source(f,pos.to.env(grep("^myfuncs$",search())))

Khi bạn thực hiện các thay đổi, bạn luôn có thể tìm lại nguồn đó với cùng một dòng hoặc sử dụng một cái gì đó như

evalq(f <- function(x) x * 2, pos.to.env(grep("^myfuncs$",search())))

để đánh giá các bổ sung / sửa đổi trong môi trường bạn đã tạo.

Tôi biết đó là sự hiểu biết, nhưng tránh phải quá trang trọng về nó (nhưng nếu bạn có cơ hội tôi sẽ khuyến khích hệ thống gói - hy vọng tôi sẽ di chuyển theo cách đó trong tương lai).

Đối với các quy ước về mã hóa, đây là điều duy nhất tôi thấy về tính thẩm mỹ (tôi thích chúng và làm theo một cách lỏng lẻo nhưng tôi không sử dụng quá nhiều dấu ngoặc nhọn trong R):

http://www1.maths.lth.se/help/R/RCC/

Có các "quy ước" khác liên quan đến việc sử dụng [, drop = FALSE] và <- như toán tử gán được đề xuất trong các bản trình bày khác nhau (thường là ghi chú) tại useR! hội nghị, nhưng tôi không nghĩ bất kỳ điều nào trong số này là nghiêm ngặt (mặc dù [, drop = FALSE] hữu ích cho các chương trình mà bạn không chắc chắn về đầu vào mà bạn mong đợi).


6

Tính tôi là một người khác ủng hộ các gói. Tôi sẽ thừa nhận là khá kém khi viết các trang man và họa tiết cho đến khi / khi tôi phải (tức là được phát hành), nhưng nó thực sự là một cách thực sự tiện dụng để bó doe nguồn. Thêm vào đó, nếu bạn nghiêm túc về việc duy trì mã của mình, những điểm mà Dirk đưa ra đều xuất hiện trong plya.


4

Tôi cũng đồng ý. Sử dụng hàm pack.skotte () để bắt đầu. Ngay cả khi bạn nghĩ rằng mã của bạn có thể không bao giờ được chạy lại, nó có thể giúp thúc đẩy bạn tạo mã chung hơn có thể giúp bạn tiết kiệm thời gian sau này.

Đối với việc truy cập vào môi trường toàn cầu, điều đó thật dễ dàng với toán tử << -, mặc dù điều đó không được khuyến khích.


3

Chưa học cách viết các gói, tôi luôn tổ chức bằng cách tìm nguồn cung cấp các tập lệnh con. Nó tương tự như các lớp viết nhưng không liên quan. Nó không phải là chương trình thanh lịch nhưng tôi thấy tôi xây dựng các phân tích theo thời gian. Khi tôi có một phần lớn hoạt động, tôi thường chuyển nó sang một tập lệnh khác và chỉ lấy nguồn vì nó sẽ sử dụng các đối tượng không gian làm việc. Có lẽ tôi cần nhập dữ liệu từ một số nguồn, sắp xếp tất cả chúng và tìm các giao điểm. Tôi có thể đặt phần đó vào một kịch bản bổ sung. Tuy nhiên, nếu bạn muốn phân phối "ứng dụng" của mình cho người khác hoặc sử dụng một số đầu vào tương tác, một gói có thể là một tuyến tốt. Là một nhà nghiên cứu, tôi hiếm khi cần phân phối mã phân tích của mình nhưng tôi OFTEN cần phải tăng cường hoặc điều chỉnh nó.


Tôi đã sử dụng phương pháp này nhưng từ đó nhận ra rằng các hàm và gói tốt hơn nguồn ("next_script.R"). Tôi đã viết về nó ở đây: stackoverflow.com/questions/25273166/ từ
Arthur Yip

1

Tôi cũng đã tìm kiếm chén thánh của quy trình làm việc phù hợp để kết hợp một dự án lớn R. Tôi tìm thấy năm ngoái gói này được gọi là rsuite , và, chắc chắn, đó là những gì tôi đang tìm kiếm. Gói R này được phát triển rõ ràng để triển khai các dự án R lớn nhưng tôi thấy rằng nó có thể được sử dụng cho các dự án R nhỏ hơn, kích thước trung bình và kích thước lớn. Tôi sẽ cung cấp liên kết đến các ví dụ trong thế giới thực trong một phút (bên dưới), nhưng trước tiên tôi muốn giải thích mô hình mới của việc xây dựng các dự án R với rsuite.

Ghi chú. Tôi không phải là người sáng tạo hoặc phát triển rsuite.

  1. Chúng tôi đã làm tất cả các dự án sai với RStudio; mục tiêu không nên là tạo ra một dự án hoặc một gói nhưng phạm vi lớn hơn. Trong rsuite, bạn tạo một siêu dự án hoặc dự án tổng thể, chứa các dự án R và gói R tiêu chuẩn, trong tất cả các kết hợp có thể.

  2. Khi có một siêu dự án R, bạn không cần Unix nữa makeđể quản lý các cấp thấp hơn của các dự án R bên dưới; bạn sử dụng tập lệnh R ở trên cùng. Tôi se cho bạn xem. Khi bạn tạo một dự án chính rsuite, bạn sẽ có cấu trúc thư mục này:

nhập mô tả hình ảnh ở đây

  1. Thư mục Rlà nơi bạn đặt các tập lệnh quản lý dự án của bạn, những tập lệnh sẽ thay thế make.

  2. Thư mục packageslà thư mục rsuitechứa tất cả các gói tạo thành siêu dự án. Bạn cũng có thể sao chép dán một gói không thể truy cập từ internet và rsuite cũng sẽ xây dựng gói đó.

  3. thư mục deploymentlà nơi rsuitesẽ ghi tất cả các nhị phân gói được chỉ định trong các DESCRIPTIONtệp gói . Vì vậy, điều này làm cho chính nó, bạn dự kiến ​​thời gian tích lũy hoàn toàn có thể tái tạo.

  4. rsuiteđi kèm với một khách hàng cho tất cả các hệ điều hành. Tôi đã thử nghiệm tất cả. Nhưng bạn cũng có thể cài đặt nó như là một addincho RStudio.

  5. rsuitecũng cho phép bạn xây dựng một condacài đặt bị cô lập trong thư mục riêng của nó conda. Đây không phải là môi trường mà là bản cài đặt Python vật lý có nguồn gốc từ Anaconda trong máy của bạn. Điều này hoạt động cùng với R SystemRequirements, từ đó bạn có thể cài đặt tất cả các gói Python bạn muốn, từ bất kỳ kênh conda nào bạn muốn.

  6. Bạn cũng có thể tạo các kho lưu trữ cục bộ để kéo các gói R khi bạn ngoại tuyến hoặc muốn xây dựng toàn bộ nội dung nhanh hơn.

  7. Nếu bạn muốn, bạn cũng có thể xây dựng dự án R dưới dạng tệp zip và chia sẻ nó với các đồng nghiệp. Nó sẽ chạy, cung cấp cho các đồng nghiệp của bạn có cùng phiên bản R được cài đặt.

  8. Một tùy chọn khác là xây dựng một thùng chứa của toàn bộ dự án trong Ubuntu, Debian hoặc CentOS. Vì vậy, thay vì chia sẻ tệp zip với bản dựng dự án của bạn, bạn chia sẻ toàn bộ vùng Dockerchứa với dự án của bạn đã sẵn sàng để chạy.

Tôi đã thử nghiệm rất nhiều với việc rsuitetìm kiếm khả năng tái tạo hoàn toàn và tránh phụ thuộc vào các gói mà người ta cài đặt trong môi trường toàn cầu. Điều này là sai bởi vì ngay khi bạn cài đặt bản cập nhật gói, dự án, thường xuyên hơn không, ngừng hoạt động, đặc biệt là các gói có lệnh gọi rất cụ thể đến một hàm với các tham số nhất định.

Điều đầu tiên tôi bắt đầu thử nghiệm là với bookdownsách điện tử. Tôi chưa bao giờ đủ may mắn để có một cuốn sách để sống sót qua thử thách của thời gian dài hơn sáu tháng. Vì vậy, những gì tôi đã làm là chuyển đổi dự án bookdown ban đầu để theo rsuitekhuôn khổ. Bây giờ, tôi không phải lo lắng về việc cập nhật môi trường R toàn cầu của mình, vì dự án có bộ gói riêng trong deploymentthư mục.

Điều tiếp theo tôi đã làm là tạo ra các dự án máy học nhưng rsuitetheo cách này. Một dự án tổng thể, phối hợp ở trên cùng, và tất cả các dự án con và gói phải chịu sự kiểm soát của chủ. Nó thực sự thay đổi cách bạn viết mã với R, giúp bạn làm việc hiệu quả hơn.

Sau đó tôi bắt đầu làm việc trong một gói mới của tôi được gọi rTorch. Điều này là có thể, phần lớn, bởi vì rsuite; nó cho phép bạn suy nghĩ và đi lớn.

Một lời khuyên mặc dù. Học rsuitekhông dễ. Bởi vì nó trình bày một cách mới để tạo các dự án R, nó cảm thấy khó khăn. Đừng mất tinh thần ở những lần thử đầu tiên, hãy tiếp tục leo dốc cho đến khi bạn thực hiện được. Nó đòi hỏi kiến ​​thức nâng cao về hệ điều hành và hệ thống tệp của bạn.

Tôi hy vọng rằng một ngày nào đó RStudiocho phép chúng tôi tạo ra các dự án phối hợp như rsuitethực hiện từ menu. Nó sẽ rất tuyệt.

Liên kết:

Repo RSit GitHUb

giảm giá r4ds

máy ảnh và hướng dẫn sáng bóng

moderndive-book-rsuite

phiên dịch_ml-rsuite

IntroMachineLearningWithR-rsuite

clark-intro_ml-rsuite

hyndman-bookdown-rsuite

thống kê_rethinking-rsuite

fread-điểm chuẩn-rsuite

dataviz-rsuite

phân khúc bán lẻ-h2o-hướng dẫn

telco-khách hàng-churn-hướng dẫn

sclerotinia_rsuite


-7

R có thể sử dụng tương tác và các tập lệnh nhỏ, nhưng tôi sẽ không sử dụng nó cho một chương trình lớn. Tôi sẽ sử dụng ngôn ngữ chính cho hầu hết các chương trình và gói nó trong giao diện R.


1
Có những gói lớn (ví dụ như các chương trình) ngoài kia. Bạn có nghiêm túc đề nghị họ nên được viết lại bằng một số ngôn ngữ khác không? Tại sao???
Eduardo Leoni

4
Một xem xét là hiệu quả. Tôi thường viết lại mã R thành mã C ++ và làm cho nó nhanh hơn 100 lần. Một cách khác là hỗ trợ công cụ. R không có gì có thể so sánh với các IDE như Eclipse hay Visual Studio. Cuối cùng, nếu một chương trình rất lớn, có khả năng nó sẽ thực hiện các nhiệm vụ phi thống kê mà R không phù hợp lắm.
John D. Cook

2
Có một plugin (Stat-ET) có sẵn cho phép Eclipse tương tác với R. Tôi đồng ý rằng C ++ có thể hoạt động nhanh hơn nhiều so với R. Nhưng bạn cần bao nhiêu thời gian để mã hóa lại công cụ R thành C ++? Trừ khi bạn có thể sử dụng lại mã thường xuyên, lợi ích của mã nhanh hơn không đáng bao nhiêu so với nỗ lực mã hóa lại trong C ++.
Thierry

2
Vâng, có một sự đánh đổi (hiệu suất v hiệu suất). Và đối với công việc phân tích / thống kê dữ liệu thuần túy, R thường thắng. Nhưng để viết các tác vụ khác, ví dụ GUI, web, v.v., tôi không chắc đó là trường hợp. Chúng tôi thường tạo nguyên mẫu và làm việc trong R nhưng triển khai mã sản xuất trong Python / C ++. Với sau này bạn sẽ có được hiệu suất rất trưởng thành và các thư viện tái sử dụng / khuôn khổ cho các nhiệm vụ khác nhau. Nhưng, đây là một tình huống lỏng lẻo và hệ sinh thái R không ngừng phát triển.
ars

Việc sử dụng Rcppgói, bao gồm mã C ++ trong các chương trình R trở nên khá đơn giản. Vì vậy, việc viết lại một số phần nhất định của mã R có thể được tích hợp vào R khá dễ dàng. Ngoài ra, sự ra đời của RStudio đã giới thiệu một IDE cho R, có lẽ nó không mạnh bằng Visual Studio.
Paul Hiemstra
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.