2017-11-03 11 views
-1

私はもう一度レガシーRコードを見て、ユーザーの心を読もうとしています。 Pythonスタイルを使用しているので、空のRベクトルを定義し、forループを使用して結果をベクトルに追加するように見えます。空のベクトルにdata.tableの行を追加する---正しいdata.tableのことを行う

empty_vector <- c() 

for(i in 1:nrow(dtable)) 
{ 
empty_vector <- append(empty_vector,strsplit(dtable[i,6],":")[[1]][2]) 
} 

は、これは+ 500Kの行で、かなり大規模なdata.tableです:

library(data.table) 
dtable = read.table("path/filename.txt",header=TRUE,sep="\t",check.names=FALSE) 

このdata.tableを定義した後、ここにここで行われているものである たものです。

(1)forループは使用しないでください。これを行うdata.table方法があります。

(2)したがって、空のベクトルを定義し、このベクトルに結果を追加することはRではありません。これに対する「Rアプローチ」とは何ですか?

編集:私はプログラマがPythonでこのような何かを考えていたと思う:

empty_list = [] ## equivalent to R vector 

for i in range(10): 
    empty_list.append(i) 

print(empty_list) ## now [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

がどのように誰かが、これはRであり、我々はdata.tableの行を反復されている与えられた、このような何かをしますか?

+0

は私に壊れたコードのように見えるとなります。サンプルデータを入力してください。しかし、これをループして追加する必要はありません。追加は非常に遅いです。 – CCurtis

+0

@CCurtis私の編集を参照してください。彼らがやろうとしていることは、Pythonの空のリストに項目を繰り返して追加するのと似ていると思います。 – ShanZhengYang

答えて

0

これはRで非常に簡単に行うことができます。表の各行について、1列のテキストから値を抽出しています。次に、それらの値のベクトルが必要です。データテーブルの第6列の名前を仮定するとcolnname6あり、これは

emtpy_list = dtable[, strsplit(colnname6, ":")[2]] 
関連する問題