R - как я могу сохранить значение «печать»? - PullRequest
2 голосов
/ 19 апреля 2010

В R, когда я использую «print», я вижу все значения, но как я могу сохранить это как вектор? Например, в цикле «for»: for(i in 1:10), я хотел бы получить значение A, когда i = 1,2,3,4 ..... но если я использую x=A, оно сохраняет только окончательное значение A, которое является значением, когда i = 10. Итак, как я могу сохранить значения в печати (A)? Кроме того, я использую более одного цикла for, например:

for (i in 1:9) {
  for (k in 1:4) {
  }
}

Следовательно, x [i] = A ... здесь не очень хорошо работает.

Ответы [ 3 ]

5 голосов
/ 19 апреля 2010

Я думаю, что ответ Этьеннебра показывает вам, что вы должны делать, но вот как захватить вывод print, как вы говорите, вы хотите: используйте функцию capture.output.

> a <- capture.output({for(i in 1:5) print(i)})
> a
[1] "[1] 1" "[1] 2" "[1] 3" "[1] 4" "[1] 5"

Вы можете видеть, что он захватывает все точно так, как напечатано. Чтобы избежать всех [1] с, вы можете использовать cat вместо print:

a <- capture.output({for(i in 1:5) cat(i,"\n")})
> a
[1] "1 " "2 " "3 " "4 " "5 "

Еще раз, вы, вероятно, на самом деле не хотите делать это для своего приложения, но есть ситуации, когда этот подход полезен (например, чтобы скрыть автоматически напечатанный текст, на котором настаивают некоторые функции).

EDIT: Поскольку выходные данные print или cat представляют собой строку, если вы ее захватите, она все равно будет строкой и будет иметь кавычки. Чтобы удалить кавычки, просто используйте as.numeric:

> as.numeric(a)
[1] 1 2 3 4 5
2 голосов
/ 19 апреля 2010

Может быть, вы должны использовать c().

a <- NULL
for(i in 1:10){
  a <- c(a,i)
}
print(a)
0 голосов
/ 19 апреля 2010

Другой опцией может быть функция Reduce:

a <- Reduce(function(w,add) c(w,add), NULL, 1:10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...