尽管工作非嵌套,嵌套for循环给出错误

时间:2018-02-08 18:10:23

标签: r for-loop nested nested-loops

我在使用嵌套for循环时遇到了一些麻烦。如果我在没有嵌套for循环的情况下运行代码,我会得到我想要的结果。我需要它在巢内发生,但我现在得到一个错误说明:

" data.frame(...,check.names = FALSE)出错:参数意味着行数不同:0,1"

虽然,当我在for-loop之外运行它时,我不会这样做。关于如何继续作为嵌套循环运行,您有什么建议吗?

以下是样本数据

$(function() {

var imagesPreview = function(input, placeToInsertImagePreview) {

if (input.files) {
    console.log(input.files);
    var filesAmount = input.files.length;

    for (i = 0; i < filesAmount; i++) {
        var reader = new FileReader();

        reader.onload = function(event) {
            $($.parseHTML('<img>')).attr('src', event.target.result).appendTo(placeToInsertImagePreview);
        }

        reader.readAsDataURL(input.files[i]);
    }
}

};

$('#file-upload').on('change', function() {
imagesPreview(this, 'div.gallery');
});  
});

这给了我错误。我猜测它是因为k和l的长度不同,但是如果我在for循环之外运行最后一部分(作为一个单独的部分 - 见下文)它可以工作。

Route    Year    ID   Amount
1         1       A       5
1         2       A       2
1         3       A       7
1         4       A       1
1         1       B       5
1         2       B       11
1         3       B       0
1         4       B       2

ID_list<- unique(data$ID)

for(i in 1:length(ID_list)){
ID <- data[which(data$ID== ID_list[i]), ]
route_list <- unique(ID$Route)
for(j in 1:length(route_list)){
SP_R <- ID[which(ID$Route == route_list[j]), ]
for(k in 1:(nrow(SP_R)-1)){
  for(l in (k+1):nrow(SP_R)){
    new_data<- rbind(new_data,cbind(SP_R[k,],SP_R[l,]))
  }}}}

我不知道为什么会这样。感谢您的意见!

1 个答案:

答案 0 :(得分:0)

您必须在for循环之外定义new_data,如下所示:

new_data<-NULL

之后这将是你的输出:

for(i in 1:length(ID_list)){
   ID <- data[which(data$ID== ID_list[i]), ]
   route_list <- unique(ID$Route)
   for(j in 1:length(route_list)){
     SP_R <- ID[which(ID$Route == route_list[j]), ]
     for(k in 1:(nrow(SP_R)-1)){
       for(l in (k+1):nrow(SP_R)){
         new_data<- rbind(new_data,cbind(SP_R[k,],SP_R[l,]))
       }}}}

new_data
       Route Year ID Amount Route Year ID Amount
    1      1    1  A      5     1    2  A      2
    2      1    1  A      5     1    3  A      7
    3      1    1  A      5     1    4  A      1
    21     1    2  A      2     1    3  A      7
    22     1    2  A      2     1    4  A      1
    31     1    3  A      7     1    4  A      1
    5      1    1  B      5     1    2  B     11
    51     1    1  B      5     1    3  B      0
    52     1    1  B      5     1    4  B      2
    6      1    2  B     11     1    3  B      0
    61     1    2  B     11     1    4  B      2
    7      1    3  B      0     1    4  B      2