#r
#r
Вопрос:
Я хочу преобразовать вывод цикла for в вектор, чтобы его можно было отобразить. Простой пример заключается в следующем:
for(i in 3:5) {
z <- i 1
print(z)
}
[1] 4
[1] 5
[1] 6
Как я могу захватить вывод 4,5,6, чтобы его можно было отобразить?
Комментарии:
1. Может быть, вы могли бы дать нам лучший обзор того, чего вы пытаетесь достичь. Предложения Андри хороши, но, не зная, что вы пытаетесь сделать, мы могли бы также стрелять в темноту.
Ответ №1:
Вместо того, чтобы использовать 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
.