代码之家  ›  专栏  ›  技术社区  ›  Roman LuÅ¡trik

试图附加一个列表,但有些内容中断

  •  0
  • Roman LuÅ¡trik  · 技术社区  · 14 年前

    我正在尝试创建一个空列表,该列表将包含尽可能多的元素 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 回复  |  直到 14 年前
        1
  •  2
  •   wkmor1    14 年前

    假设“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)
    }
    

    会达到你想要的。