3

日付の列で apply() 条件を使用して一連の係数を返そうとすると、エラー メッセージが表示されます。

私はデータセットを持っています(ここでは簡単にするために変更されていますが、再現可能です):

ADataset <- data.table(Epoch = c("2007-11-15", "2007-11-16", "2007-11-17", 
                       "2007-11-18", "2007-11-19", "2007-11-20", "2007-11-21"),
                       Distance = c("92336.22", "92336.23", "92336.22", "92336.20",
                       "92336.19", "92336.21", "92336.18))
ADataset
        Epoch Distance
1: 2007-11-15 92336.22
2: 2007-11-16 92336.23
3: 2007-11-17 92336.22
4: 2007-11-18 92336.20
5: 2007-11-19 92336.19
6: 2007-11-20 92336.21
7: 2007-11-21 92336.18

分析は、開始日と終了日を設定することから始まります。

############## Establish dates for analysis
#4.Set date for center of duration
StartDate <- "2007-11-18"
as.numeric(as.Date(StartDate)); StartDate
EndDate <- as.Date(tail(Adataset$Epoch,1)); EndDate

次に、分析の期間を設定します。

#5.Quantify duration of time window
STDuration <-  1
LTDuration  <- 3

次に、両方の期間にわたって回帰し、勾配を返す関数を作成します。

# Write STS and LTS functions, each with following steps
#6.Define time window- from StartDate less ShortTermDuration to 
StartDate plus ShortTermDuration
#7.Define Short Term & Long Term datasets
#8. Run regression over dataset
my_STS_Function <- function (StartDate) {

  STAhead  <- as.Date(StartDate) + STDuration; STAhead
  STBehind <- as.Date(StartDate) - STDuration; STBehind
  STDataset  <- subset(Adataset, as.Date(Epoch) >= STBehind & as.Date(Epoch)<STAhead)
  STResults <- rlm( Distance ~ Epoch, data=STDataset); STResults
  STSummary <- summary( STResults ); STSummary
  # Return coefficient (Slope of regression)
  STNum <- STResults$coefficients[2];STNum
}
my_LTS_Function <- function (StartDate) {
  LTAhead  <- as.Date(StartDate) + LTDuration; LTAhead
  LTBehind <- as.Date(StartDate) - LTDuration; LTBehind
  LTDataset  <- subset(Adataset, as.Date(Epoch) >= LTBehind & as.Date(Epoch)<LTAhead)
  LTResults <- rlm( Distance ~ Epoch, data=LTDataset); LTResults
  LTSummary <- summary( LTResults ); LTSummary
  # Return coefficient (Slope of regression)
  LTNum <- LTResults$coefficients[2];LTNum

次に、関数をテストして、単一の日付に対して機能することを確認します。

myTestResult <- my_STS_Function("2007-11-18")

機能するので、データセット内の日付の範囲に関数を適用します。

mySTSResult <- apply(Adataset, 1, my_STS_Function, seq(StartDate : EndDate))

...私の目的の結果は、mySTSResult (勾配) のリスト、配列、またはベクトルです (その後、myLTSResults の別のリスト/配列/ベクトルであるため、持続時間にわたって STSlope:LTSlope の比率を作成できます)、何かのように(mySTSResultsが作成されました)...

> Adataset
    Epoch Distance mySTSResults
1: 2007-11-15 92336.22            3
2: 2007-11-16 92336.23            4
3: 2007-11-17 92336.22            5
4: 2007-11-18 92336.20            6
5: 2007-11-19 92336.19            7
6: 2007-11-20 92336.21            8
7: 2007-11-21 92336.18            9

私だけがこのエラーを受け取ります:

Error in FUN(newX[, i], ...) : unused argument(s) (1:1185)

これは私に何を伝え、どのようにそれを修正するのですか? 私はいくつかの検索を行いましたが、修正を見つけることができません。

うまくいけば、私はこれを十分に説明しました。詳細が必要な場合はお知らせください。

4

2 に答える 2

0

わかりました、問題は 関数呼び出しmy_STS_Functionに記載されている追加の引数にあるようです(1つのパラメーターのみで定義したため)。apply日付範囲はその関数に追加のパラメーターとして渡されており、R はそれが未使用であると不平を言っています (1185 要素のベクトルのようです)。最初に日付範囲で制限された行のサブセットをプルしようとしていて、次に適用したいmy_STS_Functionですか? 私はそれに対する正確な解決策について少し考えなければなりません。

申し訳ありません-私はそこのコメントで自分の仕事をしました。考えられる解決策は次のとおりです。

subSet <- Adataset[Adataset[,1] %in% seq(StartDate:EndDate),][order(na.exclude(match(Adataset[,1], seq(StartData,EndDate))),]

この質問の回答から適応:

R 別のベクトルから行列の行を選択する (match, %in)

于 2013-08-13T23:00:59.277 に答える