如何在 `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)}
- 这会起作用:
df2 <- lapply(df,fonct(x))
- 这行不通:
df2 <- lapply(split(df, df$id),fonct(x))
第二个示例将不起作用,因为来自 split
的元素不是数据框。
不要在 lapply
通话中使用 fonct(x)
。只需使用函数名称。例如
df2 <- lapply(split(df, df$id),fonct)
这只是一个例子,这是我假设的数据库:
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)}
- 这会起作用:
df2 <- lapply(df,fonct(x))
- 这行不通:
df2 <- lapply(split(df, df$id),fonct(x))
第二个示例将不起作用,因为来自 split
的元素不是数据框。
不要在 lapply
通话中使用 fonct(x)
。只需使用函数名称。例如
df2 <- lapply(split(df, df$id),fonct)