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

How to use user defined function within `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))

第二个示例将不起作用,因为来自 split 的元素不是数据框。

不要在 lapply 通话中使用 fonct(x)。只需使用函数名称。例如

df2 <- lapply(split(df, df$id),fonct)