2013-12-09 2 views
0

guys Я хочу вызвать java в R, поэтому самая важная вещь заключается в том, что как преобразовать тип данных между R и java, я знал: «.jnew» «new» может создать java объект, однако, после того, как я назвал функцию Java, как я могу преобразовать значение возвращается в R типапреобразование данных между R и java

j_d2 = .jnew("java.util.Date",'2011-1-1') 

данных для примера, как я могу конвертировать j_d2 в POSIXCT типа в R признателен за любую помощь

ответ

0

R не знает, как преобразовать объекты Java, другие примитивы, отображаемые через JNI (при использовании .jcall). Вам необходимо будет предоставить свое собственное преобразование, например. путем анализа строкового представления вашего проекта даты с использованием as.POSIXct (j_d2 $ toString, format = "..."). См.? Strptime для спецификации формата.

Например, в моей местности я использую следующий формат:

> library(rJava) 
> .jinit() 

> j_d2 <- str(.jnew("java/util/Date")) 
> j_d2$toLocaleString() 
[1] "8-Dec-2013 9:05:00 PM" 
> as.POSIXct(j_d2$toLocaleString(), format="%e-%b-%Y %X %p") 
[1] "2013-12-08 09:05:00 PST" 

Преобразование строки является неэффективным, если вам нужно конвертировать много дат. В качестве альтернативы вы можете использовать это method, описанное Саймоном Урбанеком:

> d <- .jnew("java/util/Date","2013/12/08 08:00") 
> d 
[1] "Java-Object{Sun Dec 08 08:00:00 PST 2013}" 

> # Java uses milliseconds, R expects seconds 
> as.POSIXct(.jcall(d,"J","getTime")/1000, origin = "1960-01-01") 
[1] "2003-12-08 08:00:00 PST" 
Смежные вопросы