如果函数将数据框作为其参数之一,是否可以对其进行矢量化?我有一个自定义函数,它具有以下参数:
a.function<- function(a=c(),
b=data.frame(),
c=data.frame(),
d="",
e="",
f=data.frame()) {
...
}
是否有我可以使用的数据结构允许我使用*apply
函数之一,以便我可以同时在许多变量上运行该函数?
编辑:以下是我目前正在运行代码的示例:
a <- c(1000,2000,1000)
b <- data.frame(type=c('string1',
'string2',
'string3'),
value=c(2500,4000,3500),
difference=c(0,30,0))
c <- data.frame(pd=4,
gu=100)
d <- 'string4'
e <- 8
test <- a.function(a, b, c, d, e)
# test is a 1x3 character matrix
> test
[1] "44537" "0.1" "B"
a
,b
,c
,d
和e
一起描述了一个群组,我在其上运行a.function
group ..我希望能够定义许多这样的组,然后立即在所有这些组上运行a.function
。我意识到我可能需要显着重构代码;没关系。谢谢!
答案 0 :(得分:2)
data.frames
...
my.list <- list(list1=list(a,b,c,d,e),list2=list(a2,b2,c2,d2,e2)... etc.)
然后我会看到plyr
系列函数。
llply(my.list,a.function)
它们很容易实现简单的并行化,但它也很容易在应用系列中使用多个内核(例如mclapply(my.list,a.function,...)
)。您必须在函数中添加一些前端内容以获取各种data.frames
答案 1 :(得分:1)
首先想到的是简单地使用mapply
。您有一个与a.function
的每个参数相关联的列表:aList
,bList
等。
这些列表的每个第i个元素集合都是对a.function
的连续调用的参数。电话会看起来像:
mapply(a.function,aList,bList,cList,dList,eList,SIMPLIFY = FALSE)
我包含simplify = FALSE
只是因为我不知道您希望输出看起来是什么样的。
如果功能性编程更像是你的一杯茶,你可以使用?Map
完成同样的事情。