2010-01-23 29 views
9

Tôi chỉ mới bắt đầu học cách sử dụng rpy2 với python. Tôi có thể làm cho các ô đơn giản và như vậy, nhưng tôi đã chạy vào vấn đề mà nhiều tùy chọn trong R sử dụng ".". Ví dụ, đây là một cuộc gọi R hoạt động:Python và Rpy2: Gọi hàm lô với các tùy chọn có "." trong chúng

barplot (t, col = heat.colors (2), names.arg = c ("pwn", "pwn2"))

trong đó t là ma trận.

Tôi muốn sử dụng cùng một cuộc gọi trong python, nhưng từ chối "." một phần của names.arg. Sự hiểu biết của tôi là trong python bạn thay thế "." với "_", chẳng hạn như names_arg, nhưng điều đó cũng không hoạt động. Tôi biết đây là một vấn đề cơ bản vì vậy tôi hy vọng ai đó đã nhìn thấy điều này và biết sửa chữa. Cảm ơn!

Trả lời

8

Bạn có thể sử dụng một cuốn từ điển ở đây cho các đối số được đặt tên (using **) như described trong các tài liệu, và gọi R trực tiếp cho các chức năng. Cũng nên nhớ rằng RPy2 mong đợi own vector objects của nó. Vâng, đó là một chút vụng về, nhưng trên mặt tích cực, bạn sẽ có thể làm gì trong rpy2 bạn có thể làm trong R.

from rpy2 import robjects 
color = robjects.r("heat.colors")() 
names = robjects.StrVector(("pwn", "pwn2")) 
robjects.r.barplot(t, col=color, **{"names.arg":names}) 

(Lưu ý rằng đây là phiên bản 2.0.x rpy2; có một số . thay đổi trong unreleased 2.1 mà tôi đã không có một cơ hội để nhìn vào chưa)

+0

Điều này hoạt động như một sự quyến rũ - cảm ơn! –

1

Tôi không biết liệu Rpy có chấp nhận điều này hay không, nhưng bạn có thể có các thông số từ khóa có dấu chấm trong chúng. Bạn phải vượt qua chúng thông qua một từ điển mặc dù. Như thế này:

>>> def f(**kwds): print kwds 
... 
>>> f(a=5, b_c=6) 
{'a': 5, 'b_c': 6} 
>>> f(a=5, b.c=6) 
Traceback ( File "<interactive input>", line 1 
SyntaxError: keyword cant be an expression (<interactive input>, line 1) 
>>> f(**{'a': 5, 'b.c': 6}) 
{'a': 5, 'b.c': 6} 
+0

Điều này thực sự hữu ích, đặc biệt là kết hợp với Trả lời 2. Tất cả đã được khắc phục ngay bây giờ, cảm ơn! –

+0

Trong trường hợp đó, bạn nên đánh dấu câu trả lời này hoặc câu trả lời khác như được chấp nhận. –

0

với rpy2-2.1.0, một cách để viết nó sẽ là:

from rpy2.robjects.packages import importr 
graphics = importr("graphics") 
grdevices = importr("grDevices") 

graphics.barplot_default(t, 
         col = grdevices.heat_colors(2), 
         names_arg = StrVector(("pwn", "pwn2"))) 

phải sử dụng barplot_default (chứ không phải rằng barplot) là do việc sử dụng rộng rãi các dấu chấm lửng '...' trong chữ ký của R một là d để thực tế lưu bản dịch tên thông số sẽ yêu cầu phân tích mã R mà hàm chứa.

Thêm và ví dụ về hàm để thực hiện dịch có hệ thống của '.' đến '_' là tại: http://rpy.sourceforge.net/rpy2/doc-2.1/html/robjects.html#functions

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