2011-01-27 38 views
12

Tôi tương đối mới đối với R và rất mới đối với dòng lệnh Linux (Ubuntu). Tôi đang cố gắng để viết một trang trong PHP có chứa một lệnh tôi muốn thực hiện trong R và sau đó vượt qua các kết quả trở lại để có thể làm việc với họ. Tôi đã thử các biến thể của mã dưới đây, nhưng tôi chỉ nhận được thông báo R chào đón như đầu ra của tôi:Sử dụng R thông qua PHP

<?php 

$rQuery = "\"echo 3 + 1;\" | /usr/bin/R --no-save"; 
exec($rQuery, $output); 
print_r($output); 

?> 

Khi tôi tự gõ $ rQuery trong dòng lệnh kết quả là những gì tôi mong đợi: [1] 4.
Tôi biết tôi phải thiếu một cái gì đó để kết thúc ở đó, nhưng tôi đã không thể tìm ra nó thông qua tìm kiếm của riêng tôi.

Trả lời

11

Vài điểm:

  1. Bạn muốn --slave như tùy chọn, nó ngụ ý --no-save và biến những lời chào tắt; xem hướng dẫn sử dụng để biết thêm.

  2. Những gì bạn thực sự muốn là Jeff Horner tuyệt vời R-bên-Apache, xem here for more. Nó có thể sử dụng khuôn khổ templating như brew là tốt. Hơn hết, Jeff hiện cung cấp gói .deb cho bạn: sử dụng deb http://ppa.launchpad.net/jeffreyhorner/rapache/ubuntu lucid main trong /etc/apt/sources.list.

  3. Nếu bạn nhấn mạnh vào đường ống từ php, hãy xem xét lối vào kịch bản littler Jeff và tôi đã viết. Nó sẽ bắt đầu nhanh hơn R.

+1

1. Cảm ơn bạn! Bạn không có ý tưởng bao nhiêu đó là gây phiền nhiễu cho tôi. 2. Điều này có vẻ rất hữu ích, tôi sẽ xem xét nó một khi tôi nhận được tốt hơn ở tất cả các công cụ này. 3. Đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn bạn đã viết nó! Trong trường hợp ai đó tò mò, tôi đã có thể nhận được kết quả chính xác mà tôi đang tìm kiếm bằng cách sử dụng: " " – crix

+0

Niềm vui. Littler (ví dụ '/ usr/bin/r') bắt đầu thể hiện R nhúng của nó với tùy chọn đó với cùng lý do. –

+1

Xin lỗi vì định dạng trên vẫn đang học SO! – crix

1

Bất cứ điều gì apache người dùng đang chạy có thể không có cùng biến môi trường hoặc quyền như khi bạn chạy nó từ trình bao bằng tay. Tìm hiểu apache của người dùng chạy như thế nào và đảm bảo rằng nó có quyền và biến môi trường phù hợp.

+0

Cảm ơn, tôi đã bắt đầu gặp sự cố này khi thử các lệnh phức tạp hơn trong R. – crix

6

Đối với một cái gì đó đơn giản này, bạn không nên thậm chí sử dụng PHP, vì bạn có thể làm điều đó chỉ với RApache, brew gói và đồng bằng HTML (CSS/JS là không bắt buộc). Chỉ cần đọc the RApache manual và xem Jeroen Ooms 'video tutorial. Bạn cũng nên đọc hướng dẫn sử dụng brew. Jeff thực sự đã làm rất tốt!

Tóm lại, bạn chỉ cần thiết lập apache2.conf hoặc .htaccess tệp. Thay vì sử dụng chỉ thị <Directory> hoặc <Location>, bạn có thể sử dụng chỉ thị <FilesMatch> để bạn có thể đối sánh tệp với regexpr. Đây là một mẫu .htaccess:

<FilesMatch "^.+\.rhtml$"> 
    SetHandler r-script 
    RHandler brew::brew 
</FilesMatch> 

tôi sử dụng phần mở rộng tập tin đặc biệt .rhtml nơi tôi trộn HTML với cú pháp R trong vòng <%%> thẻ (xem brew tài liệu). Tôi đã không sử dụng brew với PHP, bởi vì brew với HTML đã làm các trick.

Dù sao, bạn nói rằng bạn muốn:

viết một trang trong PHP có chứa một lệnh Tôi muốn thực hiện trong R và sau đó vượt qua các kết quả lại cho được thể làm việc với họ

  • về thực thi lệnh từ người dùng nhập ... tốt ... đừng làm điều đó! Đặc biệt là không cho phép người dùng thực thi các lệnh tùy chỉnh vì họ có thể dễ dàng chuyển các lệnh system hoặc file.* và làm hỏng hệ thống của bạn! Bạn có thể sử dụng AppArmor, nhưng nó vẫn còn một chặng đường dài xuống ...
  • tập trung vào hình thức HTML đơn giản và sử dụng POST, GET, COOKIES, FILESMÁY CHỦ biến RApache cung cấp, và sau đó điều chỉnh các yếu tố đầu vào trong R script
  • về "chuyển kết quả trở lại", bạn có thể sử dụng gói XML R hoặc rjson (yêu thích của tôi và tôi khuyên bạn nên sử dụng). Sau đó, bạn có thể chuyển đối tượng R thành hàm toJSON và bỏ kích hoạt nó bằng JavaScript. Tất nhiên, điều đó chỉ đúng nếu khách hàng của bạn là trình duyệt web, nếu không, nếu bạn muốn chuyển một số thông tin đến hệ thống nhúng, bạn nên sử dụng tiêu chuẩn XML -way
  • để làm điều gì đó đơn giản, bạn không cần PHP. Dù sao, bạn nên liên hệ với Jeroen, tôi biết ông đã sử dụng một số PHP trong đơn đăng ký Stockplot của mình

Nếu có bất kỳ câu hỏi nào khác, hãy sử dụng RApache mailing list.

... và xin chào thế giới R-webdev! =)

+0

Cảm ơn. Tôi đồng ý với những gì bạn đã nói. Đối với những gì nó có giá trị tôi không có kế hoạch xây dựng một ứng dụng web công cộng với điều này-máy chủ đang chạy trên một vm trên máy tính để bàn của tôi và không kết nối với internet. Nó có nghĩa là để được sử dụng trong bộ phận của chúng tôi để tự động hóa một số nhiệm vụ lặp đi lặp lại. Tôi chỉ sử dụng PHP kể từ khi tôi biết nó đã và muốn cung cấp một giao diện trình duyệt đơn giản cho người khác sử dụng. RApache trông tuyệt vời và tôi dự định sử dụng nó một khi tôi vượt qua những điều cơ bản. – crix

+0

OK. RApache là đủ. Nếu bạn muốn tương tác với phiên R theo cách mở, hãy thử Rserve thay thế. RApache thực hiện phiên R mới trên mỗi yêu cầu HTTP, vì vậy hãy nhớ điều đó. Chỉ cần không mã hóa HTML trong tập lệnh R (với 'cat' hoặc' print'), và cố gắng tuần tự hóa/phân tích cú pháp dữ liệu của bạn thành JSON/XML và unserialize/deparse với JS hoặc bất kỳ thứ gì. Đó là khá nhiều ... may mắn! =) – aL3xa

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