到现在为止,当我只想将函数应用于数字列时,我使用了

library(tidyverse)

map(diamonds[map_lgl(diamonds, is.numeric)], range, na.rm = TRUE)


现在我想知道这是否是map_if()不太笨重的情况。我试过的是:

map_if(diamonds, is.numeric, range, na.rm = TRUE)


但是由于某种原因,现在为所有列(不仅是数字列)计算了range

我做错了什么还是误解了map_if()的目的?如果是后者,我将在什么情况下使用map_if()

最佳答案

我们可以使用summarise_if

diamonds %>%
     summarise_if(is.numeric, funs(list(range(.)))) %>%
     unnest
# A tibble: 2 x 7
#   carat depth table price     x     y     z
#   <dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
# 1 0.200  43.0  43.0   326   0     0     0
#2 5.01   79.0  95.0 18823  10.7  58.9  31.8




map_if将应用于numeric列上的函数,并取消其他列的接触,以便我们从这些列中获取原始值。 summarise_if将根据条件对数据集进行子集化并将功能应用于这些列

关于r - purrr::map_if:仅将函数应用于特定列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49190307/

10-12 17:41