如何将tapply函数转换为for循环?

阿努·阿敏(Anuj Amin)

我有一个应该像tapply()一样工作的函数,但似乎无法正常工作。我需要使用for循环。

baby.tapply = function(X, INDEX, FUN) {
  z = 0
 for(y in levels(factor(INDEX))){
   z = FUN(X)
 }
  return(z)
}

baby.tapply(X=mtcars$mpg, INDEX=mtcars$cyl, FUN=mean)

#Should mimic this: 
tapply(mtcars$mpg, mtcars$cyl, mean)

从这里出发有什么建议吗?我的输出:20.090625 1

正确的输出(来自抽头)4 6 8 26.66364 19.74286 15.10000

罗纳克·沙

这里有一种方法来模拟tapplyfor循环:

baby.tapply = function(X, INDEX, FUN) {

  lvls <- levels(factor(INDEX))
   z <- numeric(length(lvls))
   for(y in seq_along(lvls)){
       z[y] = FUN(X[INDEX == lvls[y]])
    }
    return(setNames(z, lvls))
}

baby.tapply(X=mtcars$mpg, INDEX=mtcars$cyl, FUN=mean)
#      4        6        8 
#26.66364 19.74286 15.10000 

#Comparing with the output of tapply
tapply(mtcars$mpg, mtcars$cyl, mean)
#       4        6        8 
#26.66364 19.74286 15.10000 

如@Onyambu所提到的,可能最好将其初始化z为列表而不是向量

z <- vector("list",length(lvls))

对于诸如range返回两个值的函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将转换转换为函数?

来自分类Dev

如何将for循环转换为变量?

来自分类Dev

如何将循环转换为元组

来自分类Dev

如何将for循环转换为流

来自分类Dev

如何将函数转换为MooTools?

来自分类Dev

如何将向量转换为函数

来自分类Dev

如何将这个“ for”循环转换为“ while”循环?

来自分类Dev

如何将C ++ 11循环转换为传统循环?

来自分类Dev

c++ - 如何将for循环转换为while循环

来自分类Dev

如何将 for 循环转换为 while 循环?

来自分类Dev

R-如何将这个嵌套的for循环转换为可以改变列表的lapply函数

来自分类Dev

使用while循环时如何将重复代码转换为函数

来自分类Dev

C ++-如何将函数转换为模板函数

来自分类Dev

如何将组合函数转换为置换函数?

来自分类Dev

如何将递归函数转换为迭代函数?

来自分类Dev

如何将函数转换为管道友好函数?

来自分类Dev

如何将MATLAB函数转换为R函数?

来自分类Dev

MATLAB:如何将(sym)函数转换为匿名函数?

来自分类Dev

如何将函数 sumVec 转换为模板函数

来自分类Dev

如何将普通函数转换为类中的函数?

来自分类Dev

如何将foreach循环转换为Linq查询?

来自分类Dev

如何将循环转换为向量分配符号

来自分类Dev

如何将PHP循环转换为MySQL查询?

来自分类Dev

如何将for循环输出转换为列表?

来自分类Dev

如何将for循环的结果转换为列表?

来自分类Dev

如何将文件循环转换为LINQ?

来自分类Dev

如何将for循环的结果转换为pandas数据帧?

来自分类Dev

如何将foreach循环转换为Linq查询?

来自分类Dev

如何将for循环/转换为漂亮的coffeescript