r - mapply 有两个列表和一个数据框

标签 r

我正在尝试编写一个在涉及两个列表和一个数据框的 mapply 中使用的函数。我想挑选出由两个列表(行和列)索引的几个数据子集。这是我想在循环中执行的操作的示例,以及我对该函数的尝试:

#simulated data and column, row indexes
set.seed(100)
d <- data.frame(matrix(1:100,nrow=10,ncol=10))
y <- lapply(vector("list", 5),function(x){sample(1:10,5)}) 
x <- as.list(c(1,3,5,7,9),length=5)

# version in loop
whatiwant <- list(length=5)
for (i in 1:5){
   whatiwant[[i]] <- d[y[[i]],x[[i]]]
}

fun <- function(x,y,d){d[y,x]}

whatiwant2 <- mapply(fun,y,x,MoreArgs=d)

从给出的错误来看,我怀疑mapply试图将这个函数应用到d的每一列;我该如何避免这种情况?如果我只索引一个维度(例如行)和单个列,则等效于使用 lapply 将是:

onedim <- lapply(y,function(d,y){d[y]},d=d[,1])

最佳答案

MoreArgs 参数需要一个包含附加参数的列表。由于 data.frame 是一个列表,mapply 认为 data.frame 列是附加参数并提示该函数不使用这些。您需要将 data.frame 包装在 list 中。您还应该设置 SIMPLIFY = FALSE 以获得返回的列表。

whatiwant2 <- mapply(fun, y = y, x = x, MoreArgs=list(d), SIMPLIFY = FALSE)
#[[1]]
#[1]  7 10  4  6  3
#
#[[2]]
#[1] 21 29 26 27 30
#
#[[3]]
#[1] 48 47 45 42 50
#
#[[4]]
#[1] 62 70 69 67 66
#
#[[5]]
#[1] 86 90 89 88 81

关于r - mapply 有两个列表和一个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29771307/

相关文章:

r - 曲线下的阴影面积

将字符向量中的日期替换为特定格式

r - dplyr 和 group_by : factor vs no factor

r - 无法从另一个容器访问由 docker 容器创建的文件?

r - 将字符串分成两列

r - dplyr - 与 seq_along 内存问题一起变异大数据集

r - 更灵活的引文格式

R 中的 XML 包 - readHTMLTable 和多行类

R:如何整合这些数据框?

r - 查找 data.table 中重复序列的最长长度和值