2017-05-18 6 views
1

私はdata.tableで何らかの理由で動作しませんが、R環境で使用するとうまく動作する関数を使用しています。誰がなぜこれが起こるのか知っていますか?rでdata.tableの関数を使用してエラーが発生しました

基本的に、この関数は配列内の最も近い年をdata.tableの指定された年に割り当てます。この関数は1つの変数(data.tableにある)を必要とし、2番目の変数は最も近い年が得られる可能な年の配列です。コードの例を以下に示します。

私は警告を取得:

: - :この特定の問題については、「警告メッセージYearsArrayで YearI 長いオブジェクトの長さが短く、オブジェクトの長さの倍数ではありません」

library (data.table) 

DAT<-data.table(Yr=1950:1960) 
ArrayYearsB<- c(1950, 1955, 1960) 

#---start---pair-years function----# 
YearPairing <- function (YearI,YearsArray) 
{ 
YearB=c(abs(YearsArray-YearI)) 
YearA=min(YearB) 
YearA=grep(paste0("^",YearA,"$"),YearB) 
YearA= YearsArray[YearA][1] 
return(YearA) 
} 
#---end---pair-years function----# 


DAT[,YearB:=YearPairing(Yr,ArrayYearsB)] 

YearPairing(1950,ArrayYearsB) 

答えて

3

を、あなたがすることができます次のようにロール引数を使用します。ここ

data.table(Yr=ArrayYearsB)[DAT, roll="nearest", .(Yr=i.Yr, that=x.Yr), on="Yr"] 
     Yr that 
1: 1950 1950 
2: 1951 1950 
3: 1952 1950 
4: 1953 1955 
5: 1954 1955 
6: 1955 1955 
7: 1956 1955 
8: 1957 1955 
9: 1958 1960 
10: 1959 1960 
11: 1960 1960 

は、ベクターは、DAT変数の所望の名前を追加、data.tableに変換され、その後data.tableは、DATは=「年」を使用して結合で左として使用されます。ロール引数には、ベクトルの最も近い値を選択する "nearest"が与えられます。この結果はjステートメントに供給され、希望結果はi.x.を使用して抽出されます。

DAT[, that := data.table(Yr = ArrayYearsB)[DAT, on=.(Yr), roll="nearest", x.Yr]] 
+0

data.table DATの列として「その」に追加する方法はあります:

は戻ってメインテーブルに割り当てるには? – Camilo

関連する問題