2012-01-04 39 views
5

Tôi hiện đang sử dụng ActiveState Perl 5.14 và dự án R phiên bản 2.13.2. Trong vòng Perl tôi đang sử dụng Statistics :: R phiên bản 0.08. Theo ActiveState, các phiên bản mới hơn của Statistics::R (thông qua 0,24) đã không được giám sát và do đó không có sẵn thông qua PPM.Thống kê Perl :: R tạo ra hình ảnh ô trống (jpeg)

Lịch sử: Tôi đã sử dụng thành công Perl để truy cập R trong một thời gian để thực hiện phân tích. Bây giờ tôi muốn tạo ra hình ảnh JPEG của các kết quả phân tích để dễ dàng hình dung.

Đây là vấn đề: Tôi có thể tạo hình ảnh thành công từ trong bảng điều khiển R. Tuy nhiên, khi tôi chạy các lệnh tương tự thông qua Perl tôi chỉ nhận được một hình ảnh trống. console mã của tôi bao gồm (giản thể, tất nhiên):

x<-c(1,2,3,4,5) 
    y<-c(5,4,3,2,1) 
    jpeg("C:/temp.jpg") 
    plot(x,y) 
    dev.off() 

Và lệnh Perl của tôi bao gồm (cũng đơn giản):

$R = Statistics::R->new(); 
    $R->start_sharedR 
    $R->send("x<-c(1,2,3,4,5)"); 
    $R->send("y<-c(5,4,3,2,1)"); 
    $R->send('jpeg("C:/temp.jpg")'); 
    $R->send("plot(x,y)"); 
    $R->send("dev.off()"); 

Bất kỳ lời đề nghị? Tôi biết rằng có những lựa chọn âm mưu khác có thể truy cập được vào Perl. Tôi đã loại bỏ một số (GD Graph) vì dữ liệu trục X không được coi là số. Tôi muốn giữ nó trong R nếu có thể vì tôi đã tương tác trong gói đó để phân tích. Cảm ơn!

+0

Thử sử dụng gói "Cairo" (ví dụ: 'CairoJPEG()'), các hàm dựng sẵn như 'jpeg' có thể phụ thuộc vào back-end mà bạn chạy nó từ đó một số khả năng có thể có dạng R GUI nhưng không có khi nhúng (tôi không kiểm tra ví dụ này, nhưng Cairo hoạt động bất kể back-end). –

+0

Tôi đã chạy mã Perl mà bạn đã cung cấp (cho phép cả 'strict' và' warnings') và nó hoạt động tốt. Tôi biết từ kinh nghiệm trước đó rằng 'Thống kê :: R' được sử dụng để có vấn đề bằng văn bản đồ họa cho hình ảnh (hoặc ít nhất là nó đã làm trên hệ thống của tôi). Đảm bảo rằng phiên bản 'Thống kê :: R' của bạn được cập nhật. –

+0

Với ActiveState Tôi tin rằng tôi bị giới hạn ở 0.08. – Ryan

Trả lời

4

Quên thống kê :: R. Chỉ cần sử dụng một cuộc gọi hệ thống. Ít nhất đó là những gì tôi làm!

my $path_to_r = "C:/Program Files/R/bin/Rscript.exe"; 

my $cmd = "x<-c(1,2,3,4,5);"; 
$cmd .= "y<-c(5,4,3,2,1);"; 
$cmd .= 'jpeg("C:/temp.jpg");'; 
$cmd .= "plot(x,y);"; 
$cmd .= "dev.off()"; 

system($path_to_r . " -e '" . $cmd . "'"); 

Nếu tập lệnh R của bạn tăng lên một chút hoặc nếu nó lấy đầu vào từ các tham số, hãy ghi vào tệp và tệp Rscript.exe.

+0

Đồng ý. Đây là những gì tôi đã kết thúc làm anyway. Tôi không thể làm cho Strawberry PERL làm việc; có quá nhiều phụ thuộc bị hỏng. – Ryan

0

Nó hoạt động tốt cho tôi với thống kê R :: 0,27, nhưng không phải với 0,08, phiên bản duy nhất tôi có thể tìm thấy trong quản lý gói hoạt động của perl. Để cài đặt 0,27, tôi phải sử dụng dòng lệnh cpan. Thực hiện kiểm tra không thành công nhưng cài đặt đã ổn. Bit của một cuộc sống tiết kiệm.

(Bằng cách này tôi là một Noob tương đối. Sử dụng cpan dòng lệnh là khá dễ dàng tuy nhiên.
Loại i /Statistics-R/ từ dòng cpan lệnh, sau đó cài đặt FANGLY/Thống kê-R-0.27.tar.gz (hoặc bất kỳ Tôi sử dụng một hệ thống cửa sổ để RSPerl khó chịu không phải là một lựa chọn cho tôi.Tôi lưu ý rằng Thống kê mới nhất :: R phiên bản là ngày tháng 3 năm 2012 vì vậy có lẽ một số vấn đề đã được giải quyết trước đó (đường ống?) đã được giải quyết. Bạn cũng có thể cần phải cài đặt một 'nhà sản xuất', trong trường hợp của tôi nó là 'dmake', không phải 'nmake'. Khá dễ dàng, bạn có thể lấy một phiên bản làm từ trang web M $ và sao chép tệp .err vào PERL \ bin Nhưng giúp đỡ về điều này có sẵn ở nơi khác. Hy vọng điều này sẽ giúp!)

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