重複の可能性:
R でループが遅いのはなぜですか?
次のタスクを検討してください。データセットには、20,000 人の「ユーザー」に対して 40 の変数があります。各ユーザーには、1 ~ 150 の観測値があります。すべてのユーザーは、データと呼ばれるマトリックスに積み上げられます。最初の列はユーザーの ID で、ユーザーを識別します。すべての ID は、userid と呼ばれる 20,000 X 1 のマトリックスに格納されます。
次のRコードを検討してください
useridl = length(userid)
itime=proc.time()[3]
for (i in 1:useridl) {
temp =data[data[,1]==userid[i],]
}
etime=proc.time()[3]
etime-itime
このコードは 20,000 人のユーザーを処理し、毎回一時マトリックスを作成します。userid[i] に属する観測のサブセット。MacPro で約 6 分かかります。
MatLab では、同じタスク
tic
for i=1:useridl
temp=data(data(:,1)==userid(i),:);
end
toc
1分かかります。
なぜRはとても遅いのですか? これは標準的なタスクです。どちらの場合も行列を使用しています。何か案は?