2010-05-13 69 views
0

我试图创建一个空列表,其中包含的元素数量与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 

回答

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) 
} 

将实现你以后。

+0

在for()循环中使用length()应该用nrow()替换,但除此之外 - 完美! – 2010-05-13 08:09:04

+0

我很好奇为什么我的解决方案不起作用,有人知道吗? 为了回答你关于创建列表清单的问题 - 我想预先分配一个空列表,用来容纳RasterLayer对象。我认为这比用deparse()创建对象更优雅。 – 2010-05-13 08:11:50

+0

@romunov。好,可以。 – wkmor1 2010-05-13 09:37:43

相关问题