为什么我的变量看起来是静态的?

时间:2014-05-30 04:10:14

标签: r

我的代码中的j变量似乎是静态的,因为j <- 0永远不会将其重置为0。我的代码的输出应该是这样的:

   i   j
1 30  932
2 29  711
3 28  475
4 27  338
5 26  586
6 25  463

但目前看起来像这样:

   i    j
1 30  932
2 29 1643
3 28 2118
4 27 2456
5 26 3042
6 25 3505

我认为j应该在i in id的每次迭代时重置为0,但这不会发生。这是代码:

complete <- function(directory, id = 1:322){

#list of all files in target directory
files = dir(directory, full.names = T)

# represent a single file as a data frame
file.frame <- data.frame();

# one row of the output frame
result.frame.row <- data.frame();

# complete output frame
result.frame <- data.frame();


for(i in id){
    # get all data from the specified csv
    file.frame <- rbind(file.frame, read.csv(files[i])) 

    j <- 0
    for (k in 1:nrow(file.frame)){
        if (!is.na(file.frame$sulfate[k]) && !is.na(file.frame$nitrate[k])){
            j <- j + 1
        }   
    }
    result.frame.row <- cbind(i, j)
    result.frame <- rbind(result.frame, result.frame.row)
}

result.frame
}

编辑:这是函数的简单实现,没有引用文件。它与上面的函数没有相同的行为(即,它正常工作)。

complete <- function(id){

result.frame.row <- data.frame()
result.frame <- data.frame()

for(i in id){    
    j <- 0

    for (k in 1:5){
        if (TRUE){
            j <- j + 1
        }   
    }

    result.frame.row <- cbind(j)
    result.frame <- rbind(result.frame, result.frame.row)    
}

result.frame

}

1 个答案:

答案 0 :(得分:2)

我没有足够的评论点 - 所以它看起来像一个答案:

你的意思是file.frame <- rbind(file.frame, read.csv(files[i]))吗?因为如果这样做,for (k in 1:nrow(file.frame)){...的每次迭代都会重复上一次迭代中的所有迭代 - 包括在开始新数据/行之前将j递增到先前的值。

尝试file.frame <- read.csv(files[i]),看看你是否得到了你所期待的。