我有一个包含数据表的列表。可以使用以下代码创建示例列表。
mydata=read.table(textConnection("
MSA_id code variable Caucasian African.American Asian Hispanic Other
412 111011 1 64 2 0 0 0
412 111011 2 464 17 4 11 0
412 111021 1 2006 43 32 22 61
412 111021 2 559 18 6 10 0
412 111031 1 56 1 0 0 0
412 111031 2 1 0 0 0 0"),header=TRUE)
setDT(mydata)
z = split(mydata,mydata$code)
> z[1:2]
$`111011`
MSA_id code variable Caucasian African.American Asian Hispanic Other
1: 412 111011 1 64 2 0 0 0
2: 412 111011 2 464 17 4 11 0
$`111021`
MSA_id code variable Caucasian African.American Asian Hispanic Other
1: 412 111021 1 2006 43 32 22 61
2: 412 111021 2 559 18 6 10 0
我想根据它们的值重新格式化此列表(data.tables)的元素。 从我的代码中,重新格式化列表的元素应该是这样的: 第一元素:
[,1] [,2]
[1,] 64 2
[2,] 464 32
第二元素
Caucasian African.American Asian Hispanic
1: 2006 43 32 22
2: 559 18 6 10
算法是:
我创建了一个功能来完成它。当我一次在一个元素上使用此函数时,它工作正常,但是当我使用lapply时,它会中断。
formatTable <- function(z){
a = z[[1]]
b = a[,list(Caucasian,African.American,Asian,Hispanic),] # Deleting columns 1,2,3 and 8
if ( min(b$Caucasian) == 0) {
formatTable=NA
} else if ( (min(b$African.American) + min(b$Asian) + min(b$Hispanic)) == 0) {
formatTable=NA
} else if ( (min(b$African.American) == 0) | (min(b$Asian) + min(b$Hispanic)==0)) {
formatTable = cbind(b$Caucasian, b$African.American+b$Asian+b$Hispanic)
} else if ( min(b$Asian)==0 | min(b$Hispanic)==0) {
formatTable = cbind(b$Caucasian, b$African.American, b$Asian+b$Hispanic)
} else
formatTable = b
}
使用此功能,t1=formatTable(z[1])
和t2=formatTable(z[2])
会得到正确的结果,但如果我使用tbls = lapply(z[1:2],formatTable)
则会显示Error in FUN(X[[1L]], ...) : object 'Caucasian' not found
。
请帮助解释为什么lapply会抛出此错误。