8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

分组函数(tapply、by、aggregate)和 *apply 系列

Gereon will not feed AI 2月前

89 0

每当我想在 R 中执行 \'map\'py 操作时,我通常会尝试使用 apply 系列中的函数。但是,我从未完全理解它们之间的区别 -- 如何 {sapply、lapply 等}...

每当我想在 R 中执行某些\'map\'py 操作时,我通常会尝试使用该 apply 系列中的函数。

然而,我从来没有完全理解它们之间的区别——{ sapply , lapply 等} 如何将函数应用于输入/分组输入,输出会是什么样子,甚至输入可以是什么——所以我经常只是仔细检查它们直到得到我想要的。

有人可以解释一下何时如何使用哪一个吗?

我目前的理解(可能不正确/不完整)是......

  1. p5

  2. p6

  3. apply(matrix, 1/2, f) :输入是一个矩阵。输出是一个向量,其中元素 i 是 f(矩阵的第 i 行/第 i 列)
  4. tapply(vector, grouping, f) :输出是一个矩阵/数组,其中矩阵/数组中的元素是 f 向量分组 g ,并 g 被推送到行/列名称
  5. by(dataframe, grouping, f) :设为 g 分组。应用于 f 组/数据框的每一列。漂亮地打印分组和 f 每列的值。
  6. aggregate(matrix, grouping, f) :类似于 by ,但聚合不会漂亮地打印输出,而是将所有内容粘贴到数据框中。

附带问题:我还没有学过 plyr 或 reshape - 是否会 plyr 完全 reshape 取代这些?

帖子版权声明 1、本帖标题:分组函数(tapply、by、aggregate)和 *apply 系列
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Gereon will not feed AI在本站《list》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 一些软件包中也存在一些替代方案,上面没有讨论过。

    中的函数 parApply() parallels 在集群上执行并行计算提供了 apply 系列函数的替代方案。R 中并行计算的其他替代方案包括包 foreach doParallel 包,它们允许并行执行循环和函数。 future 包提供了一个简单而一致的 API 来使用 Future,这是一种异步评估表达式的方法,可以并行或顺序进行。此外,包还提供 purrr 了一种函数式编程方法来进行迭代和映射,并通过 future 包支持并行化。

    以下是一些示例

    parApply() 示例:

    library(parallel)
    
    # Create a matrix
    m <- matrix(1:20, nrow = 5)
    
    # Define a function to apply to each column of the matrix
    my_fun <- function(x) {
      x^2
    }
    
    # Apply the function to each column of the matrix in parallel
    result <- parApply(cl = makeCluster(2), X = m, MARGIN = 2, FUN = my_fun)
    
    # View the result
    result
    

    foreach 示例:

    library(foreach)
    library(doParallel)
    
    # Register a parallel backend
    registerDoParallel(cores = 2)
    
    # Create a list of numbers
    my_list <- list(1, 2, 3, 4, 5)
    
    # Define a function to apply to each element of the list
    my_fun <- function(x) {
      x^2
    }
    
    # Apply the function to each element of the list in parallel
    result <- foreach(i = my_list) %dopar% my_fun(i)
    
    # View the result
    result
    

    未来的例子:

    library(future)
    
    # Plan to use a parallel backend
    plan(multisession, workers = 2)
    
    # Create a list of numbers
    my_list <- list(1, 2, 3, 4, 5)
    
    # Define a function to apply to each element of the list
    my_fun <- function(x) {
      x^2
    }
    
    # Apply the function to each element of the list in parallel using futures
    result <- future_map(my_list, my_fun)
    
    # View the result
    result
    

    purrr示例:

    library(purrr)
    library(future)
    
    # Plan to use a parallel backend
    plan(multisession, workers = 2)
    
    # Create a list of numbers
    my_list <- list(1, 2, 3, 4, 5)
    
    # Define a function to apply to each element of the list
    my_fun <- function(x) {
      x^2
    }
    
    # Apply the function to each element of the list in parallel using purrr
    result <- future_map(my_list, my_fun)
    
    # View the result
    result
    

    编辑于 2023-07-02( 未来 作者):用以下代码替换已弃用且不再存在的 multiprocess 未来 后端: multisession .

返回
作者最近主题: