试图附加一个列表,但有些东西会中断

时间:2010-05-13 06:30:31

标签: list r

我正在尝试创建一个空列表,其中包含与num.of.walkers一样多的元素。然后,我尝试向每个创建的元素追加一个新的子列表(新子列表的长度对应于a中的值。

当我在R中捣乱时,一切顺利:

list.of.dist[[1]] <- vector("list", a[1])
list.of.dist[[2]] <- vector("list", a[2])
list.of.dist[[3]] <- vector("list", a[3])
list.of.dist[[4]] <- vector("list", a[4])
然后我尝试编写一个函数。这是我的微弱尝试,导致错误。有人能说出我做错了吗?

countNumberOfWalks <- function(walk.df) {
    list.of.walkers <- sort(unique(walk.df$label))
    num.of.walkers <- length(unique(walk.df$label))

    #Pre-allocate objects for further manipulation
    list.of.dist <- vector("list", num.of.walkers)
    a <- c()

    # Count the number of walks per walker.
    for (i in list.of.walkers) {
        a[i] <- nrow(walk.df[walk.df$label == i,])
    }
    a <- as.vector(a)

    # Add a sublist (length = number of walks) for each walker.
    for (i in i:num.of.walkers) {
        list.of.dist[[i]] <- vector("list", a[i])
    }
    return(list.of.dist)
}

> num.of.walks.per.walker <- countNumberOfWalks(walk.df)
Error in vector("list", a[i]) : vector size cannot be NA

1 个答案:

答案 0 :(得分:2)

假设'walk.df'类似于:

walk.df <- data.frame(label=sample(1:10,100,T),var2=1:100)

然后:

countNumberOfWalks <- function(walk.df) {
    list.of.walkers <- sort(unique(walk.df$label))
    num.of.walkers <- length(unique(walk.df$label))

    list.of.dist <- vector("list", num.of.walkers)

    for (i in 1:num.of.walkers) {
        list.of.dist[[i]] <- vector("list", 
        nrow(walk.df[walk.df$label == list.of.walkers[i],]))}

    return(list.of.dist)
}

将实现您的目标。