2013-04-19 11 views
5

Próbuję utworzyć obiekt sekwencji z seqdef przy użyciu formatu SPELL. Oto przykład mojego danych:Tworzenie obiektu sekwencji z danych SPELL

spell <- structure(list(ID = c(1, 3, 3, 4, 5, 5, 6, 8, 9, 10, 11, 11, 
12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 
15, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 
19), status = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 2, 3, 1, 2, 3, 2, 3, 1, 1, 1, 3, 1, 3, 3, 1, 3, 1, 1, 1, 
1, 1, 3, 3, 1, 3, 1, 1, 1), time1 = c(1, 1, 57, 1, 1, 91, 1, 
1, 1, 1, 1, 104, 1, 1, 60, 109, 121, 1, 42, 47, 54, 64, 72, 78, 
85, 116, 1, 29, 39, 69, 74, 78, 88, 1, 16, 40, 68, 1, 30, 123, 
1, 39, 51, 1, 61), time2 = c(125, 57, 125, 125, 91, 125, 125, 
125, 125, 125, 104, 125, 125, 60, 109, 121, 125, 42, 47, 54, 
64, 72, 78, 85, 116, 125, 29, 39, 69, 74, 78, 88, 125, 16, 40, 
68, 125, 30, 123, 125, 39, 51, 125, 61, 125)), .Names = c("ID", 
"status", "time1", "time2"), row.names = c(NA, 45L), class = "data.frame") 

Kiedy próbuję zdefiniować obiekt sekwencji, dziwny błąd zostanie rzucony:

spell.seq <- seqdef(data=spell, informat="SPELL", id="ID", begin="time1", end="time2", 
        status="status", limit=125,process=FALSE) 

[>] time axis: 1 -> 125 
[>] SPELL data converted into 17 STS sequences 
[>] 3 distinct states appear in the data: 
    1 = 1 
    2 = 2 
    3 = 3 
[>] state coding: 
     [alphabet] [label] [long label] 
    1 1   1  1 
    2 2   2  2 
    3 3   3  3 
[>] 17 sequences in the data set 
[>] min/max sequence length: 125/125 
Error in `row.names<-.data.frame`(`*tmp*`, value = value) : 
    invalid 'row.names' length 

Jeśli jednak zrobić to samo pośrednio poprzez seqformat, zachowując te same argumenty, żaden błąd nie jest zgłaszany:

sts <- seqformat(data=spell,from="SPELL",to="STS", 
       id="ID",begin="time1",end="time2",status="status", 
       limit=125,process=FALSE) 

seqs <- seqdef(sts,right="DEL") 

Korzystanie z TraMineR 1.8-5 z R 3.0.0 Windows 7 64-bitowy. Czy to błąd, czy robię coś nie tak? Z góry dziękuję.

+1

Dziękujemy za szczegółowe zgłoszenie błędu (tak, tak, jest to błąd). Zauważyłem też, że pierwsze połączenie nie podaje prawidłowej liczby sekwencji. Na razie użyj seqformat separatycznie. –

+0

@MatthiasStuder Przypadkowo wkleił wyniki z głównych danych, a nie przykład. Edytowane. Błąd nadal występuje. –

+0

@MatthiasStuder Sprawdziłem listę wymienionych raportów o błędach i nie widziałem tego, do którego się odwołałem, więc aby zaktualizować ... może to nie być błąd, ponieważ dokumentacja jest dość specyficzna (jak podano w odpowiedzi poniżej). – Thell

Odpowiedz

4

Szybkie spojrzenie na źródło seqdef() dla ustawienia row.names pokazuje, że są one ustawione na podstawie wartości argumentu id.

Patrząc w ?seqdef do id przedstawia

id
opcjonalny argument do ustawiania rownames obiektu sekwencji. Jeśli NULL (domyślnie), rownames są pobierane z danych wejściowych. Jeśli ustawione na "auto", sekwencje są ponumerowane od 1 do liczby sekwencji. Można również podać wektor rownames o długości równej liczbie sekwencji.

Na przykład w pytaniu podaje się numer id="ID", który nie spełnia tych kryteriów. Zmiana tego na id=NULL umożliwia wykonanie polecenia zgodnie z oczekiwaniami i sprawdzenie równości przy użyciu identical(spell.seq, seqs), co daje true.

Powiązane problemy