Выведите j на каждой итерации внешнего цикла в R - PullRequest
7 голосов
/ 09 декабря 2011

Для следующего кода: я не могу понять, почему j не печатает на каждой итерации внешнего цикла.

x = 0

for (j in 1:15)
{
for (i in 1:100000)
{
x = x + 1
}
print(j)
}

Кажется, что R выполняет все это, и в конце выдает все j s, а не один за другим, как при повторении каждого цикла.

Кажется, что j должен печатать после каждой итерации цикла, что мне здесь не хватает?

Есть ли способ сделать так, чтобы j печатался на каждой итерации внешнего цикла?

Спасибо

Ответы [ 3 ]

14 голосов
/ 09 декабря 2011

Я предполагаю, что вы используете Windows Rgui, которая буферизует свой вывод консоли, а затем записывает его порциями (см. R FAQ по Windows 7.1 ). Для принудительной немедленной печати на консоль вы можете просто добавить вызов к flush.console() после оператора print().

x = 0

for (j in 1:15) {
    for (i in 1:100000) {
        x = x + 1
    }
    print(j)
    flush.console()
}
5 голосов
/ 09 декабря 2011
Выход

R обычно буферизуется.Вы можете обойти это двумя способами.Либо (только в Windows, IIRC) вы можете перейти в меню R Gui и выбрать Misc -> Buffered Output (или нажать Ctrl-W), чтобы отключить буферизацию (что обычно замедляет выполнение), либо вы можете вызвать flush.console() в любое время, когда вы хотите убедиться, что выходные данные действительно отображаются (например, для отображения прогресса).

1 голос
/ 09 декабря 2011

Не знаком с R, но этот код выглядит правильно для того, что вы пытаетесь сделать. Может быть, что-то связано с буферизацией вывода, так как я столкнулся с той же проблемой в PHP, когда весь сценарий запускается до того, как будет обработан какой-либо вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...