2013-04-19 8 views
5

SPELLフォーマットを使用してseqdefのシーケンスオブジェクトを作成しようとしています。ここに私のデータの例である:私は、シーケンス・オブジェクトを定義しようとすると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") 

は、奇妙なエラーがスローされます。

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 

しかし、私は保存、seqformatを介して間接的に同じことをしている場合同じ引数は、エラーがスローされない:

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") 

R 3.0.0のWindows 7 64ビット版でTraMineR 1.8から5を使用しました。これはバグですか、何か間違っていますか?前もって感謝します。

+1

不具合報告書をありがとうございました(はい、バグです)。私は、最初の呼び出しが正しい数のシーケンスを与えていないことにも気付きました。今のところ、seqformat separatlyを使用してください。 –

+0

@MatthiasStuder事例ではなく、主データから結果を貼り付けています。編集されました。エラーはもちろん続きます。 –

+0

@MatthiasStuder記載されているバグレポートを見て、これを参照していないので、あなたをアップデートしています...(詳細は後述) – Thell

答えて

4

row.namesの設定方法についてseqdef()のソースを簡単に見てみると、それらはid引数の値に基づいて設定されています。 idため?seqdefに探し

は、配列オブジェクトのrownamesを設定するため

ID
オプションの引数を示しています。 NULL(デフォルト)の場合、rownamesは入力データから取得されます。 "auto"に設定すると、シーケンスは1からシーケンス数まで番号が付けられます。シーケンスの数に等しい長さのrownamesのベクトルも同様に指定することができる。

質問の例から、これらの基準を満たしていないid="ID"を渡しています。これをid=NULLに変更すると、コマンドが正常に完了し、identical(spell.seq, seqs)を使用して等しいかどうかを確認すると、trueが得られます。

関連する問題