簡體   English   中英

如何將lapply()與帶有參數的函數一起應用

[英]how to apply lapply() with a function with arguments

我有這個df:

set.seed(20)
df <- data.frame(X1 = sample(c(1:10,NA), 10, replace=TRUE),
                X2 = sample(c(1:10,NA), 10, replace=TRUE),
                X3 = sample(c(1:10,NA), 10, replace=TRUE),
                stringsAsFactors = FALSE)

> df
   X1 X2 X3
1  10  8  6
2   9  9  1
3   4  1  5
4   6  9  1
5  NA  3  3
6  NA  5  1
7   2  4 10
8   1  2 NA
9   4  4  1
10  5 10  8

在哪里可以輕松使用此功能:

lapply(df, sum)
df %>% lapply(., sum)
df %>% lapply(., as.numeric)

但是,如果我想將na.rm=TRUE參數放在sum()是不可能的。 我一直在尋找答案,似乎唯一的解決方案是在lapply()內部定義函數sum,例如:

lapply(df, function() {})

真的不可能將函數FUN的參數放在lapply嗎? 另外,我遇​​到的問題是當我想使用管道運算符應用需要數據的函數(例如sum(data, na.rm=TRUE) )時,我無法將數據提供給函數:

df %>% lapply(., sum(, na.rm=TRUE)) # It needs the sum argument.
df %>% lapply(., sum(., na.rm=TRUE)) # but I'm not looking to sum the whole df

我猜你想在這里df的列。 您可以按照以下步驟進行操作:

set.seed(seed = 20)

df <- data.frame(X1 = sample(c(1:10, NA), 10, replace = TRUE),
                 X2 = sample(c(1:10, NA), 10, replace = TRUE),
                 X3 = sample(c(1:10, NA), 10, replace = TRUE))

df
#>    X1 X2 X3
#> 1  10  8  6
#> 2   9  9  1
#> 3   4  1  5
#> 4   6  9  1
#> 5  NA  3  3
#> 6  NA  5  1
#> 7   2  4 10
#> 8   1  2 NA
#> 9   4  4  1
#> 10  5 10  8

lapply(df, sum, na.rm = TRUE)
#> $X1
#> [1] 41
#> 
#> $X2
#> [1] 55
#> 
#> $X3
#> [1] 36

reprex軟件包 (v0.2.1)創建於2019-04-02

一種替代方法是使用colSums(df, na.rm = TRUE)

暫無
暫無

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

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