как применить lapply () с функцией с аргументами - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть этот 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(), например:

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

1 Ответ

1 голос
/ 02 апреля 2019

Полагаю, вы хотите суммировать столбцы 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

Создано в 2019-04-02 пакетом Представить (v0.2.1)

Альтернативой будет использование colSums(df, na.rm = TRUE).

...