在多个列表上运行

时间:2012-06-15 12:56:47

标签: r list sapply

我没有使用那么多功能但是当我这样做时,我倾向于使用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并以这种方式执行此功能吗?

1 个答案:

答案 0 :(得分:4)

您正在准确描述mapply的用例。

result <- mapply(myfunction,x=mylist,y=mylist2)

不幸的是,您的示例似乎并不喜欢传递两个data.frames(x,y的第一个元素都是data.frames,x[1]y[1]似乎相矛盾)。