我没有使用那么多功能但是当我这样做时,我倾向于使用anon函数和某种形式的apply
。我现在正在尝试编写一个对列表中的项目起作用的函数。
有两个列表,每个列表都有很多项目(按项目我的意思是例如mylist1[1]
)。所有项目都是数据框架。我想从mylist1
获取第一个数据帧,从mylist2
获取第一个数据帧,并在这些数据帧的列上运行一系列函数。然后取第二个mylist1
项和第二个mylist2
项,依此类推......
以下是我习惯写的东西,但在这种情况下显然不适用于两个列表。任何人都可以通过快速的方法帮助我找出我应该使用除了sapply
方法之外的其他方法来解决这个问题,这种方法似乎会导致主要问题。
a <- c(1:10)
b <- c(1:10)
z <- c(rep("x", 5), rep("y", 5))
df <- data.frame(cbind(a, b, z))
mylist1 <- split(df, z)
mylist2 <- split(df, z)
myfunction <- function(x, y)
{
a <- as.data.frame(x[1])
b <- as.data.frame(y[1])
meana <- mean(a[1])
meanb <- mean(b[1])
model <- lm(a[1]~b[1])
return(c(model$coefficients[2], meana, meanb))
}
result <- sapply(mylist1, mylist2, myfunction)
我还以为人们认为subset
而不是z
会更好split
并以这种方式执行此功能吗?
答案 0 :(得分:4)
您正在准确描述mapply
的用例。
result <- mapply(myfunction,x=mylist,y=mylist2)
不幸的是,您的示例似乎并不喜欢传递两个data.frames(x,y的第一个元素都是data.frames,x[1]
和y[1]
似乎相矛盾)。