2017-09-19 4 views
0

私のデータセットはこのように見え、私はデータのリストを持っています。私が何をしたいかlapplyを使用してリスト内の複数のデータフレームに関数を適用すると、エラーメッセージが表示されます。

Plot_ID Canopy_infection_rate DAI 
1 YO01 5      7 
2 YO01 8      14 
3 YO01 10     21 

は、データフレームのリストに「audpc_Canopyinfactionrate」と呼ばれる機能を適用することです。私は私のデータが列をシフトしていない私のリストをチェックしました

Error in FUN(X[[i]], ...) : argument "DAI" is missing, with no default 

:私はlapply実行すると、以下のよう

はしかし、私はエラーを取得します。

誰に間違っているのか分かりますか?おかげ

は、ここに私のコードの一部です:

#Read files in to list 

for(i in 1:length(files)) { 
    lst[[i]] <- read.delim(files[i], header = TRUE, sep=" ") 
} 

#Apply a function to the list 
densities <- list() 
densities<- lapply(lst, audpc_Canopyinfactionrate) 

#canopy infection rate 
audpc_Canopyinfactionrate <- function(Canopy_infection_rate,DAI){ 
    n <- length(DAI) 
    meanvec <- matrix(-1,(n-1)) 
    intvec <- matrix(-1,(n-1)) 
    for(i in 1:(n-1)){ 
    meanvec[i] <- mean(c(Canopy_infection_rate[i], 
         Canopy_infection_rate[i+1])) 
    intvec[i] <- DAI[i+1] - DAI[i] 
    } 

    infprod <- meanvec * intvec 
    sum(infprod) 

} 
+0

あなたは 'audpc_Canopyinfactionrate()'関数の 'DAI ='引数の値を指定しませんでした。したがって、エラーメッセージ:*引数 "DAI"が欠落しています。デフォルトはありません。実際には、関数に引数を渡したようには見えません。 – thelatemail

+0

ありがとうございます。これは実際には農業の機能です。私はこのような単一のデータフレームで実行する場合:audpc_Canopyinfactionrate(X17YO1001 $ 'Canopy_infection_rate'、X17YO1001 $' DAI')。それはうまく動作します。 – Helen

+1

関数のソースはここで違いはありません私は思っていません。基本的に 'f < - function(x、y)x + y;を実行しました。 lapply(1:3、f) ' - エラーを避けるために必要なすべての引数を関数に渡す必要があります - ' f < - function(x、y)x + y; lapply(1:3、f、y = 2:4)」と表示されます。 – thelatemail

答えて

1

コメントで指摘したように、問題はあなたがlapplyを使用している方法です。

この機能は、lapply(X, FUN, ...)のように構築されています。 FUNは、に使用される関数の名前で、Xというdata.frame/listの要素にを適用します。ここまでは順調ですね。

ケースに戻る:lstのすべてのデータフレームに関数audpc_Canopyinfactionrate()を適用します。この関数は2つの引数をとります。そして、私はこれがあなたのコードに混乱している場所だと思います。 lapplyの使用方法では,lst[[2]]などをの引数がaudpc_Canopyinfactionrate()にしか使用しないことを理解してください。実際には2つの引数が必要です。

あなたは少しあなたの関数を再定式場合は、その引数が必要な列が含まれている知っているので、あなたは、あなたの関数への唯一の引数としてlst[[1]]lst[[2]]を使用することができます - Canopy_infection_rateDAIを:

audpc_Canopyinfactionrate <- function(df){ 
    n <- nrow(df) 
    meanvec <- matrix(-1, (n-1)) 
    intvec <- matrix(-1, (n-1)) 
    for(i in 1:(n-1)){ 
    meanvec[i] <- mean(c(df$Canopy_infection_rate[i], 
         df$Canopy_infection_rate[i+1])) 
    intvec[i] <- df$DAI[i+1] - df$DAI[i] 
    } 

    infprod <- meanvec * intvec 
    return(sum(infprod))  
} 

コールlapply次のように:

lapply(lst, audpc_Canopyinfactionrate) 

lapplyもwを使用することができます1つ以上の引数には、lapply(X, FUN, ...)...を使用します。あなたのケースでは、しかし、私はこれが最良の選択肢ではないと思う。

+0

お返事ありがとうございます。これは動作します!!! – Helen

関連する問題