我的代码中的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
}
答案 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])
,看看你是否得到了你所期待的。