Python e Rpy2:Chamada de plotagem de função com opções que temos "." no-los

StackOverflow https://stackoverflow.com/questions/2125218

  •  22-09-2019
  •  | 
  •  

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!

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top