2

如果我的术语有误,请纠正我,因为在这个问题上,我不太确定我在处理关于元素、对象、列表的内容。我只知道它不是数据框。使用prepksel {adehabitatHS}我试图修改我自己的数据以适合他们的包的示例。在他们的示例数据上运行这个命令会创建一个对象?称为 x 这是一个包含 3 个部分的列表?元素?给它。示例数据代码:

 library(adehabitatHS)
    data(puechabonsp)
    locs <- puechabonsp$relocs
    map <- puechabonsp$map
    pc <- mcp(locs[,"Name"])
    hr <- hr.rast(pc, map)
    cp <- count.points(locs[,"Name"], map)
     x <- prepksel(map, hr, cp)

查看 x 的结构,它是一个包含 3 个元素的列表,称为选项卡、权重和因子

str(x) 
List of 3
 $ tab   :'data.frame': 191 obs. of  4 variables:
  ..$ Elevation : num [1:191] 141 140 170 160 152 121 104 102 106 103 ...
  ..$ Aspect    : num [1:191] 4 4 4 1 1 1 1 1 4 4 ...
  ..$ Slope     : num [1:191] 20.9 18 17 24 23.9 ...
  ..$ Herbaceous: num [1:191] 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 ...
 $ weight: num [1:191] 1 1 1 1 1 2 2 4 0 1 ...
 $ factor: Factor w/ 4 levels "Brock","Calou",..: 1 1 1 1 1 1 1 1 1 1 ...

对于我的数据,我将创建多个"x"列表并希望合并每个段内的数据。所以,我"x"为 2007 年、2008 年和 2009 年创建了一个。现在,我想将"tab"08 的元素附加到 07,然后将 09 附加到 07/08。"weight"并对这个列表的和"factor"元素做同样的事情"x"。你如何绑定这些数据?我考虑过unlist在列表的每个段上使用,然后附加然后加入每个段的年度数据,然后将三个段重新连接到一个列表中。但这很麻烦,而且似乎效率很低。

我知道这不是它的工作方式,但在我的脑海中这是我应该做的:

newlist<-append(x07$tab, x08$tab, x09$tab)
newlist<-append(x07$weight, x08$weight, x09$weight)
newlist<-append(x07$factor, x08$factor, x09$factor)

也许rbinddo.call("rbind", lapply(....uh...stuck

4

1 回答 1

1

append works for vectors and lists, but won't give the output you want for data frames, the elements in your list (and they are lists) are of different types. Something like

tocomb <- list(x07,x08,x09)
newlist <- list(
  tab = do.call("rbind",lapply(tocomb,function(x) x$tab)), 
  weight = c(lapply(tocomb,function(x) x$weight),recursive=TRUE), 
  factor = c(lapply(tocomb,function(x) x$factor),recursive=TRUE)
)

You may need to be careful with factors if they have different levels - something like as.character on the factors before converting them back with as.factor.

This isn't tested, so some assembly may be required. I'm not an R wizard, and this may not be the best answer.

于 2012-09-18T15:28:28.343 回答