2012-01-29 8 views
2

付きアクセスベクトルIは、次のように定義されたベクトルを有する大きい機能を有する:R:整数名

v <- mat.or.vec(length(communities), 1) 
names(v) <- communities 

および、

for(c in communities){ 
    v[c] = 1 
} 

を次のように私はループ内vの要素にアクセスしますこのコードが作成されテストされたとき、リストcommunitiesは文字列のリストでした。しかし、今日、私がcommunitiesリスト内のすべての整数値を持つデータセットでこれを実行したとき、私の関数がクラッシュしました。それはcommunitiesが整数リストであるとき、cは整数であり、v[c]アクセスC 番目vの要素ではなく名前cvの要素であることを把握するために私にしばらく時間がかかりました。

v[as.character(c)]のようなものを使用してこの問題を解決できます。同じ問題に直面する多くのそのような変数があります。

この問題を解決する方法はありますか?

答えて

2

まあ、最も簡単な変更はfor文である:

for(c in as.character(communities)){ 
    v[c] = 1 
} 

またはベクトル化:

v[as.character(communities)] <- 1 

、あるいはより多くのあなたが試合を自分で行うことができます制御ました:

idx <- match(communities, names(v)) 
v[idx] <- 1 
+0

ありがとう!それが助けになりました。 – isEmpty

0

ベクターの要素に名前を付ける理由はわかりません - 無駄なものです。ただ

v <- mat.or.vec(length(communities), 1) # or better: v<- rep(NA,length(communities) 
for (i in 1: length(communities)) { 
    v[i] <- 1 
} 

を行うしかし、あなたはcommunitiesの要素の値で作業する必要がある場合、あなたは、いくつかの引用符を含める必要がありますない理由:

Rgames> mat.or.vec(3, 1)->bar 
Rgames> names(bar)<-4:6 
Rgames> bar 
4 5 6 
0 0 0 
Rgames> bar['4'] 
4 
0 
Rgames> bar[4] 
<NA> 
NA 

私はあなたが提供することを想定しています簡単な例です。すべての要素の値をvに設定するだけではなく、もっと複雑な作業を行う必要があります。

+0

さて、私は1に割り当てるよりもはるかに複雑なことが必要でした。私は引用符を含めることができませんでしたコミュニティがどのように生成されたかを制御する広告はありません。 – isEmpty