Biên dịch tập lệnh R thành tệp .exe độc ​​lập?


85

Có cách nào dễ dàng để biên dịch Rtập lệnh của tôi thành .exetệp độc lập giống như những gì matlab làm không?


15
Câu trả lời rất ngắn gọn: Chưa bao giờ.
Dirk Eddelbuettel

2
Trên thực tế, tôi muốn phân phối nó nhưng giữ bí mật các tập lệnh và thuật toán, có cách nào để mã hóa nó hoặc bất kỳ cách nào khác để đạt được mục đích này không?
Joyce,

2
Rất nhiều cuộc thảo luận tại stackoverflow.com/questions/4707276/…
Ben Bolker,

1
@Joyce, để ẩn mã, giải pháp tiêu chuẩn là phân phối ứng dụng trên máy chủ. Vì vậy, người dùng của bạn sẽ kết nối thông qua máy chủ. Bạn không chỉ có thể ẩn mã mà người dùng của bạn cũng sẽ luôn có quyền truy cập vào phiên bản cập nhật nhất. Tuy nhiên, bạn sẽ cần thiết lập cơ sở hạ tầng máy chủ (có lẽ tốt nhất là sử dụng nhà cung cấp đám mây R).
Tripartio

1
Tạo một gói sẽ giúp phân phối mã chung. Tôi cũng đã xem xét việc tạo một exe cho các nhiệm vụ / chức năng thông thường, các calc lặp đi lặp lại nhiều lần. Và để chia sẻ exe với một số người không sử dụng mã hóa / thích ứng dụng dựa trên giao diện người dùng. Tiếc là vẫn đang tìm cách.
bonCodigo

Câu trả lời:


28

Trên thực tế, có một cách để đạt được giải pháp đáp ứng yêu cầu của bạn. Hãy xem bài viết về Triển khai ứng dụng máy tính để bàn với R trên R-Bloggers. Như đã trình bày chi tiết trong bài viết, bạn sẽ sử dụng nhiều thứ hơn một tệp exe duy nhất.

Ngoài ra, tôi muốn thu hút sự chú ý của bạn đến RGtk2 với việc sử dụng RGtk2, bạn có thể cố gắng phát triển giao diện của riêng mình trong R. Nếu đẩy đến xô đẩy, tôi tin rằng bạn có thể đóng gói mã R của mình cùng với phiên bản R di động và phụ thuộc vào một trình cài đặt và tạo và ứng dụng từ đó, điều đó sẽ tạo ra ảo ảnh về một tệp exe duy nhất.

Trong câu hỏi của bạn, bạn đã hỏi liệu có dễ dàng phát triển một tệp thực thi độc lập thông dịch mã R hay không. Tôi sẽ không nói rằng nó dễ dàng. Nếu bạn rất muốn chạy mã R từ một ứng dụng, bạn có thể làm điều đó theo cách đơn giản hơn bằng cách sử dụng RCaller cho Java hoặc R.NET .


1
Bài viết được liên kết về cách triển khai các ứng dụng dành cho máy tính để bàn với R thực sự tốt (sử dụng các ứng dụng di động và sáng bóng!), Thx!
R Yoda

2
@RYoda Tôi rất vui khi đọc điều đó. Có quan tâm đến chủ đề này. Nếu bạn muốn gắn bó với Shiny, bài viết này cung cấp lời khuyên thú vị về cách đóng gói Ứng dụng Shiny dưới dạng Ứng dụng Windows Desktop.
Konrad

cũng có thể sử dụng công cụ tạo script RCaller trong toàn bộ API javax.script, xem mhsatman.com/rcaller-3-0
jbytecode

11

Để trả lời bình luận của bạn:

Trên thực tế, tôi muốn phân phối nó nhưng giữ bí mật các tập lệnh và thuật toán, có cách nào để mã hóa nó hoặc bất kỳ cách nào khác để đạt được mục đích này không?

Bạn có thể (loại) làm điều này bằng cách sử dụng lưu các hàm save(). Ví dụ: đây là một chức năng f()bạn muốn giữ bí mật:

f <- function(x, y) {
  return(x + y)
}

Lưu nó ở bất cứ đâu:

save(f, file = 'C:\\Users\\Joyce\\Documents\\R\\Secret.rda')

Và khi bạn muốn sử dụng chức năng:

load("C:\\Users\\Joyce\\Documents\\R\\Secret.rda")

Tôi sẽ lưu tất cả các chức năng của mình trong các tệp riêng biệt, đặt chúng trong một thư mục và có một tập lệnh .R cũ đơn giản tải tất cả chúng vào và thực thi bất cứ điều gì. Zip toàn bộ và phân phối nó cho bất cứ ai. Thậm chí có thể biên dịch nó thành một gói. Về hiệu quả, toàn bộ nội dung sẽ ở chế độ chỉ đọc.

Tuy nhiên, giải pháp này không phải là tuyệt vời. Bạn vẫn có thể thấy hàm trong R bằng cách nhập tên của hàm để nó không bị ẩn theo nghĩa đó. Nhưng nếu bạn mở tệp .rda, nội dung của chúng đều bị cắt xén. Tất cả thực sự phụ thuộc vào mức độ kinh nghiệm của người nhận mã của bạn với R.


Cảm ơn bạn đã đề xuất, có thể là một cách để ngăn người khác trực tiếp nhìn thấy mã, cảm ơn một lần nữa.
Joyce

3
Nhưng nó sẽ xuất hiện khi bạn nhập f.
MAPK

4

Một hình thức có mã được mã hóa được triển khai trong petalshàm trong gói TeachingDemos.

Lưu ý rằng chỉ cần các kỹ năng lập trình ở cấp độ trung cấp để tìm ra mã ẩn, tuy nhiên, nó cần nỗ lực có chủ ý và người dùng sẽ không thể khẳng định đã vô tình nhìn thấy mã. Sau đó, bạn sẽ cần một số loại thỏa thuận cấp phép để thực thi bất kỳ thỏa thuận không xem trộm nào.


Cảm ơn bạn Greg, tôi chỉ mới xem xét chức năng bạn đã đề cập, nhưng không thể tìm ra cách sử dụng chức năng đó để ẩn mã, bạn vui lòng giải thích thêm được không? Cảm ơn nhiều.
Joyce

@Joyce, petalshàm không ẩn mã, đó là một ví dụ về việc ẩn đoạn mã khóa (bạn có thể đọc đoạn mã khóa không?). Các công cụ khác là cần thiết để thực hiện mã hóa (tẩy trắng). Một cách tiếp cận đơn giản hơn được thảo luận tại: stat.ethz.ch/pipermail/r-devel/2011-October/062236.html . Biên dịch theo byte cũng có thể hữu ích, nhưng bạn thực sự cần một số loại thỏa thuận cấp phép.
Greg Snow

3

Bạn sẽ cần cài đặt R trên máy triển khai. Đối với việc tạo một tệp thực thi, tôi không chắc là có thể. Nhưng bạn có thể tạo một chương trình khác gọi tập lệnh R của bạn. R là một ngôn ngữ thông dịch. Điều đó là không thể.


3
Chúng tôi có bất kỳ tin tức nào về trình biên dịch R nào không? Tôi đã bắt đầu sử dụng python và có nhiều cách dễ dàng để tạo tệp exe (ví dụ: py2exe và cx_freeze). Có bất kỳ cơ hội để xem một cái gì đó như thế này trong R sớm không?
Tony
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.