簡體   English   中英

使用lapply將功能應用於列表中的多個數據框時的錯誤消息。

[英]Error message when using lapply to apply a function to multiple dataframes in a list.

我的數據集看起來像這樣,並且我有一個數據列表。

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

我要做的是將一個名為“ audpc_Canopyinfactionrate”的函數應用於數據幀列表。

但是,當我運行lapply時,出現如下錯誤:

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

我檢查了我的列表,確保我的數據不會移位列。

有誰知道這是怎么回事? 謝謝

這是我的代碼的一部分:

#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)

}

正如評論中指出的那樣,問題出在您使用lapply

該函數的構建方式如下: lapply(X, FUN, ...) FUN是用於應用於名為X的data.frame / list中的元素的函數的名稱。 到現在為止還挺好。

回到您的案例:您想將函數audpc_Canopyinfactionrate()應用於lst所有數據幀。 該函數有兩個參數。 我認為這就是代碼中混雜的地方。 確保您了解使用lapply的方式,將lst[[1]]lst[[2]]等用作audpc_Canopyinfactionrate()唯一參數,而實際上它需要兩個參數!

如果稍微重新定義函數,則可以將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也可以用1個多參數使用,通過使用...lapply(X, FUN, ...) 但是,就您的情況而言,我認為這不是最佳選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM