簡體   English   中英

在R中,在正在處理數據幀列表的lapply中使用函數apply()

[英]In R, use a function apply() inside of lapply that is working over a list of data frames

我正在使用另一個線程中的函數,我想在list每個data.frame上運行。 我似乎無法正確設置索引,並且在閱讀了此想法之后,也許我需要將該函數保留在原來的lapply ,但這並沒有任何改善。

我的兩個帶有NA的數據幀變成一個列表:

df1 <- data.frame(
  A = c(1, 2, 3, NA),
  B = c(1, 2, NA, NA),
  C = c(1, NA, NA, NA),
  E = c(5, 6, 7, 8)
)

df2 <- data.frame(
  A = c(1, 2, 3, NA),
  B = c(1, 2, NA, NA),
  C = c(1, NA, NA, NA),
  E = c(5, 6, 7, 8)
)

mylist <- list(df1, df2)

我的函數在lapply中:

dd <- lapply(seq_along(mylist), function(i){

        countNA <- function(mylist[[i]]) apply(mylist[[i]], MARGIN = 1, FUN = function(x) length(x[is.na(x)]))

        df_mos <- subset(mylist[[i]], select = c("A", "B", "C"))

         na_count <- countNA(df_mos)

         x = mylist[[i]][na_count < 2,]

         x = x[, c("E")] # Only give me value of E 

         x # return x 
        })

為此,我期望以下幾點:

> dd
[[1]]
   E
1  5
2  6

[[2]]
   E
1  5
2  6

R從括號開始給我這個錯誤(並且我已經嘗試過只使用一個而不是兩個,但是發生相同的事情):

> dd <- lapply(seq_along(mylist), function(i){
+         
+         countNA <- function(mylist[i]) apply(mylist[i], MARGIN = 1, FUN = function(x) length(x[is.na(x)]))
Error: unexpected '[' in:
"        
        countNA <- function(mylist["
>         
>         df_mos <- subset(mylist[i], select = c("A", "B", "C"))
Error in subset(mylist[i], select = c("A", "B", "C")) : 
  object 'i' not found
>         
>          na_count <- countNA(df_mos)
Error: could not find function "countNA"
>          
>          x = mylist[i][na_count < 2,]
Error: object 'i' not found
>          
>          x = x[, c("E")] # Only give me value of E 
Error: object 'x' not found
>          
>          x # return x 
Error: object 'x' not found
>         })
Error: unexpected '}' in "        }"

嘗試將您的countNA函數修改為此:

countNA <- function(list_entry) apply(list_entry, MARGIN = 1, FUN = function(x) length(x[is.na(x)]))

實際上,您將特定的子集列表作為參數,而函數應采用通用參數,在您的情況下為列表。 如何隔離該列表以傳遞到該函數在其他地方進行了處理。

暫無
暫無

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

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