如何在R中抑制滑块交互时控制台的冗余输出?
解决滑块调整时控制台输出冗余数值的问题
你看到的控制台冗余输出,根源是curve()函数默认会返回它计算的x/y坐标数据,而且你的plotss函数最后把这些数据组成的列表l返回了,manipulate每次调用函数都会自动把返回值打印到控制台。
最简单的解决方案:去掉不必要的赋值与返回
既然你只是需要绘图,不需要用到curve()返回的数值,直接修改代码如下:
options(warn=-1) library(ggplot2) library(manipulate) plotss<-function(n){ # 直接调用curve绘图,不赋值给变量 curve(dnorm(x,0,1),-15,15,col=1,ylab='y') if (n>1){ for (i in 2:n){ curve(dnorm(x,0,i),-15,15,col=i,add=TRUE) } } # 规范初始化向量 names=character(n) for (i in 1:n){ names[i]<-paste("N(0,",as.character(i),")",sep="") } colours=1:n legend(3,0.4,legend=names,fill=colours) # 去掉return语句,不返回任何内容 } uppern=readline("uppern= ") manipulate(plotss(k),k=slider(min=1,max=strtoi(uppern),step=1))
如果需要保留curve()的返回值
如果你后续要用到这些坐标数据,不想丢弃,可以用invisible()包裹curve()调用,或者最后用invisible()返回列表,避免控制台打印:
options(warn=-1) library(ggplot2) library(manipulate) plotss<-function(n){ l <- list() # 用invisible抑制curve的自动输出 l[[1]] <- invisible(curve(dnorm(x,0,1),-15,15,col=1,ylab='y')) if (n>1){ for (i in 2:n){ l[[i]] <- invisible(curve(dnorm(x,0,i),-15,15,col=i,add=TRUE)) } } names=character(n) for (i in 1:n){ names[i]<-paste("N(0,",as.character(i),")",sep="") } colours=1:n legend(3,0.4,legend=names,fill=colours) # 用invisible返回列表,避免控制台打印 invisible(l) } uppern=readline("uppern= ") manipulate(plotss(k),k=slider(min=1,max=strtoi(uppern),step=1))
内容的提问来源于stack exchange,提问作者israel_doberman
相关产品推荐
相关产品推荐

