Вместо использования петли for
и значений печати лучше использовать sapply
(или lapply
):
sapply(3:5, function(i)i+1)
[1] 4 5 6
Если по какой-то причине вы не можете использовать член семейства apply
, вы можете изменить цикл, чтобы присвоить выходное значение вашей функции вектору:
z <- vector("numeric", 3)
for(i in 3:5) { z[i-2] <- i + 1 }
z
[1] 4 5 6
В очень редких случаях может быть полезно фактически захватить вывод print
:
z <- vector("numeric", 3)
for(i in 3:5) { z[i-2] <- capture.output(print(i + 1)) }
z
[1] "[1] 4" "[1] 5" "[1] 6"
Но вы заметите, что это захватывает весь вывод print
, включая векторную информацию. Вы можете избавиться от этого, используя cat
:
z <- vector("numeric", 3)
for(i in 3:5) { z[i-2] <- capture.output(cat(i + 1)) }
z
[1] "4" "5" "6"
Теперь у вас есть символьный вектор, и вам придется выполнить некоторую очистку.
Нижняя строка
Не пытайтесь захватить вывод print
в цикле. Используйте sapply
или lapply
.