Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将函数列表同时应用于一个矩阵_R_Apply - Fatal编程技术网

R 将函数列表同时应用于一个矩阵

R 将函数列表同时应用于一个矩阵,r,apply,R,Apply,我有一个矩阵/数据框,即10列和1.000.000行。现在我想在这个矩阵上应用20个不同的函数并存储结果。每个函数都像 df %>% group_by(`column1`, `column2`, `column3`, `column4`) %>% filter (n()>20 ) 在这个函数之后,我想将这个矩阵/数据帧保存到一个列表中,因此应该有一个包含20个不同矩阵/数据帧的列表 我在一个循环中这样做,但那真的很慢。我用apply做了一些尝试,但没有弄清楚我错过了什么。

我有一个矩阵/数据框,即10列和1.000.000行。现在我想在这个矩阵上应用20个不同的函数并存储结果。每个函数都像

df %>%  group_by(`column1`, `column2`, `column3`, `column4`) %>% filter (n()>20 )
在这个函数之后,我想将这个矩阵/数据帧保存到一个列表中,因此应该有一个包含20个不同矩阵/数据帧的列表

我在一个循环中这样做,但那真的很慢。我用
apply
做了一些尝试,但没有弄清楚我错过了什么。 我的实际尝试是:

apply(X=df,MARGIN=c(1,2),FUN=function(df) df %>%  group_by(`column1`, `column2`, `column3`, `column4`) %>% filter (n()>20 ))
它给出了一个错误:

UseMethod中的错误(“分组方式”): 没有适用于“character”类对象的“groupby”方法

我能闻到我离解决方案不远了。你能给我一个提示吗


感谢和问候这里是一个例子。这里,
funs
包含要应用的函数的名称,
ml
是结果列表。希望这能给你足够的提示来实现你想要的。如果您需要帮助解决特定问题,请提供一些数据

funs <- c("sqrt", "log", "exp")

m <- matrix(runif(1.e4), 100, 100)

am <- function(f, m){
  apply(m, MARGIN = 1:2, match.fun(f))
}

ml <- lapply(funs, am, m = m)

funs注意
apply
使用
for
循环,因此此函数不会显著加快速度。另外,
apply
适用于矩阵,因此如果您有一个带有任何字符向量的data.frame,
apply
将构建一个字符矩阵并尝试使用它。矩阵和data.frames是非常不同的对象。请显示循环版本的
。@lmo如果我循环一个列,并将每个值乘以2,则循环速度比应用函数慢1000倍,应用函数将整个向量乘以2。在家里,我将尝试slava kohut的解决方案,并发布我的示例代码。如果速度慢1000倍,您正在做一些奇怪的事情,比如增加一个值向量。如果您所做的只是将一个向量乘以2,那么可以使用
myVec2是的,这只是一个示例。我认为没有办法将矩阵分组300次向量化,如果我正确的话,它必须循环。然后我会让它保持原样,它的cpu并行化。。。