如何在`lapply`中使用用户定义的函数

时间:2015-08-05 18:59:52

标签: r function lapply

这只是一个例子,这是我的假设数据库:

date <- as.Date(c('2015-07-01','2015-07-05', '2015-07-10', '2015-07-01', '2015-07-05', '2015-07-10'))
id <- c(1,1,1,2,2,2)
a <- c('a','z','e','r','t','y')
b <- c('y','t','r','e','z','a')
price <- c(1,2,3,4,5,6)
df <- data.frame(id,date,a,b,price)

我希望通过split df数据框id并将函数fonct()应用于列表的所有元素,但将每个元素视为数据框。像这样:

library(dplyr)
library(xts)

fonct<-function(data){
drep1<- data[1,]
drep1$a<- drep1$b
drep1$p<- 0
drep2<- data[1,]
drep2$b<- drep2$a
drep2$p<- 0
d<-rbind(data,drep1,drep2)%>% arrange(date) 
d<- as.xts(data$p, order.by=data$date)}
  1. 这样可行:df2 <- lapply(df,fonct(x))
  2. 这不起作用:df2 <- lapply(split(df, df$id),fonct(x))
  3. 第二个例子不起作用,因为来自split的元素不是数据框。

1 个答案:

答案 0 :(得分:4)

请勿在{{1​​}}来电中使用fonct(x)。只需使用功能名称。例如

lapply