2017-05-07 5 views
0

Ich verwende R spi Funktion in Python. Eines der Argumente ("kernel") benötigt eine Liste, und ich bin nicht sicher, wie ich es übergeben soll, wenn ich rpy2 verwende. Die R-Syntax wäre wie folgt (mit der "Kernel" Argument):Übergabe Liste als Argument obwohl rpy2

library("lmomco", lib.loc="~/lib/R_libs") 
library("SPEI", lib.loc="~/lib/R_libs") 

data = read.csv("rainfall_data.csv", header = FALSE) 
result = spi(data, scale=10, distribution='Gamma', fit='max-lik', kernel = list(type='rectangular', shift=0)) 

Mein Python-Skript so weit (ohne den "Kern" Argument) ist wie folgt:

import numpy as np 
from rpy2.robjects.packages import importr 
importr('lmomco') 
SPEI = importr('SPEI') 

import rpy2.robjects.numpy2ri as numpy2ri 
numpy2ri.activate() 

data = np.genfromtxt('rainfall_data.csv', delimiter=',') 

result = np.array(SPEI.spi(data, scale=10, distribution='Gamma', fit='max-lik')[1]) 

Wie würde man den Kernel als Liste für rpy2 übergeben?

Antwort

2

Betrachten wir ein ListVector aus einem Python-Wörterbuch zu schaffen, dann ist es in die Methode übergeben:

import rpy2.robjects as robjects 
... 
x = robjects.ListVector({'type': 'rectangular', 'shift': 0}) 

result = np.array(SPEI.spi(data, scale=10, distribution='Gamma', fit='max-lik', kernel=x)[1]) 
Verwandte Themen