簡體   English   中英

使用兩個列表和一個數據框

[英]mapply with two lists and a data frame

我正在嘗試編寫一個在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的每一列; 我怎么避免這個? 如果我只索引一個維度(.eg行)和一個列,則使用lapply的等價物將是:

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

MoreArgs參數需要包含aditional參數的列表。 由於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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM