将打印输出捕获到矢量中

时间:2011-10-20 07:50:42

标签: r

我想将for循环的输出捕获到向量中,以便可以绘制它。一个简单的例子如下:

for(i in 3:5) {
    z <- i + 1
    print(z)
}
[1] 4
[1] 5
[1] 6

如何捕获4,5,6的输出以便可以绘制?

1 个答案:

答案 0 :(得分:4)

使用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的输出。使用sapplylapply