2015-05-22 2 views
0

Я работаю над модификацией существующего сценария R, и я в основном собираю R, изучая его. У меня нет сильного фона программирования (я учусь), и поэтому я надеюсь, что кто-то может просто помочь объяснить часть этого цикла. (Обратите внимание, это использование ggplot2 среди других пакетов)Я запутался в сегменте R для цикла

files <- unique(SQLTable$file_names) 
for (i in 1:3){ 
    dat <- subset(SQLTable,file_names==files[]) 
    g <- ggplot(dat) + geom_point(aes(x = id, y = Value), size = 1, shape = 19, colour = 'red') + 
     geom_line(aes(x = id, y = Value), size =.5) + 
     facet_grid(Measure ~., scales = "free") 
    print(g) 
} 

Не беспокойтесь о SQLTable, file_names, идентификатор или стоимость, те все либо SQL-таблицы или имена столбцов. Вышеприведенный код является частью более крупного скрипта, но я пытаюсь выяснить, что делает (i in 1: 3) в цикле for. Я в значительной степени получаю все остальное, что происходит в цикле, но я изменил его, чтобы быть (i в 1: 2) полностью до (i в 1: 100), и это, похоже, не сильно меняет , Так в чем же цель? Почему именно 1: 3? Я надеюсь, что это не зависит от других вещей, но если это так, может быть, вы можете просто объяснить, что делает эта часть?

EDIT: Когда я запустил этот раздел кода, я получаю следующее сообщение 6 раз. geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?

следует

Warning messages: 
1: In File_names == secnarios[]: 
    longer object length is not a multiple of shorter object length 
2: In File_names == secnarios[]: 
    longer object length is not a multiple of shorter object length 
3: In File_names == secnarios[]: 
    longer object length is not a multiple of shorter object length 

Когда я запускаю код с file_names==files[i] затем я получаю это:

geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic? 
Warning messages: 
1: In loop_apply(n, do.ply) : 
    Removed 3 rows containing missing values (geom_point). 
2: In loop_apply(n, do.ply) : 
    Removed 3 rows containing missing values (geom_point). 
3: In loop_apply(n, do.ply) : 
    Removed 3 rows containing missing values (geom_path). 
4: In loop_apply(n, do.ply) : 
    Removed 3 rows containing missing values (geom_path). 
+1

Я не вижу 'i' внутри цикла и, следовательно, ожидаемое поведение. – user227710

+1

Вероятно, вы должны иметь файлы 'file_names == [i]', чтобы он создавал другой график для каждого набора файлов. Сейчас он делает один и тот же сюжет три раза подряд. –

+0

может быть, это должно быть, но оно не настроено так. Есть ли причина для его настройки без 'i'? – David

ответ

1

Без i в самом цикле, это просто повторяет то, что в { ... } три раза , Вы просто пересчитываете все и переписываете одну и ту же переменную три раза, или в вашем случае 100. Вот почему это ничего не меняет.

Вы получаете ошибку 6 раз, потому что на каждой итерации вы вызываете две проблемы.

+0

Итак, я предполагаю, что на самом деле нет веской причины делать это намеренно? Поскольку 'file_names' происходит из таблицы SQL, не следует ли' '(i в 1: 3)' отображать сколько уникальных 'file_names' есть? Скажем, у меня есть 20 разных файлов, не должно быть '(i в 1:20)'? – David

+0

@ Давид, как написано, не имеет значения, потому что 'i' не появляется в цикле – shadowtalker

+0

Это не мой вопрос. Мне любопытно 1. Если будет какая-либо причина намеренно писать этот цикл, не включая i, а затем 2. Как только i будет включен в цикл, будет ли (i в 1: 3), сколько уникальных 'file_names' есть? – David

Смежные вопросы