【问题标题】:Using map function instead of for loop in R在 R 中使用 map 函数而不是 for 循环
【发布时间】:2020-03-11 01:41:46
【问题描述】:

如果这是一个愚蠢的问题,我深表歉意——我对 R 很陌生,并且一直在努力自学。我一直在尝试使用 map 函数而不是 for 循环来重写以下代码。

  columnmean <- function(y){
  nc <- ncol(y)
  means <- numeric(nc)
  for(i in 1:nc){
    means[i] <- mean(y[, i])
  }
  means
}

columnmean(mtcars)

我使用地图的代码打印出手段,但它也添加了列名。如何正确利用地图来避免这种情况?我应该使用 imap 还是 map2?谢谢!

columnmean1 <- function(y){
  nc <- ncol(y)
  means <- numeric(nc)
  map(y, function (y) means <- mean(y) )
}

columnmean1(mtcars)

【问题讨论】:

  • 欢迎来到 Stack Overflow!您能否阅读并合并来自How to make a great R reproducible example 的元素?尤其是使用dput() 作为输入的方面,然后是您预期数据集的明确示例?
  • 感谢您的建议!我不太了解如何使用 dput(),但我希望通过包含 mtcars 数据集,它可以让每个人更容易理解我看到的问题。
  • 几件事:(1)注意嵌套函数中的变量重用。您将y 用于columnmean1 中的两个不同变量。 (2)让map中的匿名函数返回一些东西,并分配整个map()调用的结果,而不是在函数内,例如means &lt;- map(mtcars, function(col) mean(col))(与means &lt;- map(mtcars, mean)相同)。
  • 在你了解map(和map_dblmap_chr等)之前,不要担心map2imap

标签: r for-loop purrr


【解决方案1】:

你可以使用map_dbl

columnmean_map <- function(y){
   purrr::map_dbl(y, mean)
}

你也可以使用summarise_all

columnmean_summarise <- function(y){
   dplyr::summarise_all(y, mean)
}

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多