DJ сервер Devang странный вывод ppcfinder.net/judge.php

Вот ваш класс, с интерпретацией «колонки» его определения, а не с строкой; это будет важно для производительности; также дате ссылки

setClass("person", representation(name="character", age="numeric"))
pers <- new("person", name=c("John", "Tom"), age=c(20, 30))
date <- as.POSIXct(c('2013-01-01', '2013-01-02'))

Некоторые эксперименты, включая просмотр methods(class="POSIXct") и обратное внимание к сообщениям об ошибках, привели меня к реализации as.data.frame.person и format.person (последний используется для отображения в данных .frame) как

as.data.frame.person <-
    function(x, row.names=NULL, optional=FALSE, ...)
{
    if (is.null(row.names))
        row.names <- x@name
    value <- list(x)
    attr(value, "row.names") <- row.names
    class(value) <- "data.frame"
    value
}

format.person <- function(x, ...) paste0(x@name, ", ", x@age)

Это получает мои объекты в файле data.frame:

> lst <- list(id=1:2, date=date, pers=pers)
> as.data.frame(lst)
     id       date     pers
John  1 2013-01-01 John, 20
Tom   2 2013-01-02  Tom, 30

Если я хочу подмножество, тогда мне нужно

setMethod("[", "person", function(x, i, j, ..., drop=TRUE) {
    initialize(x, name=x@name[i], age=x@age[i])
})

Я не уверен, какие другие методы могут потребоваться по мере того, как встречаются больше операций data.frame, нет «интерфейса data.frame».

Использование векторизованного класса в data.table кажется для использования метода длины для построения.

> library(data.table)
> data.table(id=1:2, pers=pers)
Error in data.table(id = 1:2, pers = pers) : 
  problem recycling column 2, try a simpler type
> setMethod(length, "person", function(x) length(x@name))
[1] "length"
> data.table(id=1:2, pers=pers)
   id     pers
1:  1 John, 20
2:  2  Tom, 30

Возможно, есть интерфейс data.table?

1
задан Rich 21 October 2010 в 03:10
поделиться