Python e Rpy2:Chamada de plotagem de função com opções que temos "." no-los
Pergunta
Eu estou apenas começando a aprender como usar rpy2 com python.Eu sou capaz de fazer de um simples parcelas e tal, mas eu tenho que correr para o problema, que muitas opções em R ".".Por exemplo, aqui está um R chamada de trabalhos:
barplot(t, col=calor.cores(2), nomes.arg=c("pwn", "pwn2"))
onde t é uma matriz.
Eu quero usar a mesma chamada em python, mas ele rejeita a "." a parte dos nomes.arg.O meu entendimento foi de que em python você substituir o "." com "_", por isso names_arg por exemplo, mas que não está funcionando.Eu sei que este é um problema básico, então eu espero que alguém tenha visto isso e sabe a correcção.Obrigado!
Solução
Você pode usar um dicionário aqui para os argumentos nomeados (usando o **) como descrito no docs, e chamada de R directamente para as funções.Lembre-se também que espera que seus RPy2 próprios objetos vetoriais.Sim, é um pouco estranho, mas no lado positivo, você deve ser capaz de fazer qualquer coisa em rpy2 que você poderia fazer em R.
from rpy2 import robjects
color = robjects.r("heat.colors")()
names = robjects.StrVector(("pwn", "pwn2"))
robjects.r.barplot(t, col=color, **{"names.arg":names})
(Observe que isso é para rpy2 versão 2.0.x;existem algumas alterações no unreleased 2.1 o que eu não tive a chance de olhar para ainda).
Outras dicas
Não sei se o RPY aceitará isso, mas você pode ter parâmetros de palavras -chave com períodos neles. Você tem que passar por um dicionário. Assim:
>>> 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}
Com o RPY2-2.1.0, uma maneira de escrever seria:
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")))
Ter que usar o Barplot_default (em vez de Barplot) se deve ao uso extensivo da elipse '...' nas assinaturas de função R'Sfunção e ao fato de que a tradução do nome do parâmetro salvo exigiria a análise do código R que uma função contém.
Mais, e um exemplo de função para executar a tradução sistemática de ''. '_' está em:http://rpy.sourceforge.net/rpy2/doc-2.1/html/robjects.html#functions