【问题标题】:Prevent print() from outputting list indices in R防止 print() 在 R 中输出列表索引
【发布时间】:2011-04-27 11:45:42
【问题描述】:

我有一个 list 包含六个地块,如下所示:

voi=c('inadist','smldist','lardist')

plist <- llply(voi, 
    function(v,df,s) {
        list(   
            assign(
                paste(v,'.violin'), 
                bwplot(groupname~df[,which(colnames(df)==v)]|fCycle*fPhase, 
                    data=df, 
                    groups=groupname, col=rainbow(1), box.ratio=3,
                    main=paste('Distribution of ', v, ' by Treatment and Cycle'),
                    sub=s, xlab=v, panel=panel.violin)),
            assign(
                paste(v,'.hexbin'),
                hexbinplot(df[,which(colnames(df)==v)]~starttime|groupname, 
                    data=df, xlab='Time(s)',main= paste('Distribution of ',v,' by Treatment'),
                    sub=s,ylab=v, aspect=0.5, colramp=redgrad.pal, layout=c(2,4)))

            )
    },data,meta$exp_name)

如果我打印列表print(plist),则绘图会输出到图形设备,然后索引会输出到控制台,结果如下:

[[1]]
[[1]][[1]]

[[1]][[2]]


[[2]]
[[2]][[1]]

[[2]][[2]]


[[3]]
[[3]][[1]]

[[3]][[2]]

因为我正在编写 web 应用程序,所以我需要非常严格地控制控制台输出。到目前为止,我可以在不输出索引的情况下输出绘图的唯一方法是这样的:

for(p in plist) 
    for(i in p) 
        print(i)

有没有更有效的方法来获得我需要的东西?

【问题讨论】:

  • 我会尽力提供帮助,但您能否提供一个独立的模型数据集?
  • @Dirk Eddelbuettel:我添加了一个使用save(plist,file=fn) 生成的文件,感谢您查看。

标签: r list loops printing


【解决方案1】:

你可以用capture.output作弊:

dummy <- capture.output(print(plist))

或者不创建新变量

invisible(capture.output(print(plist)))

顺便说一下,可重现的示例如下所示:

require(lattice)
plist <- list(
    list(bwplot(rnorm(10)),bwplot(rnorm(10))),
    list(bwplot(rnorm(10)),bwplot(rnorm(10))),
    list(bwplot(rnorm(10)),bwplot(rnorm(10)))
)

【讨论】:

  • 一个可重复的例子首先设置一个种子;)
  • @Greg touché。我应该使用1:10 ;)
  • +1 - 答案的好技巧,以及可重现示例的好提示。
  • 我添加了一个指向实际列表的 R 文件的链接。在docs.google.com/…
猜你喜欢
  • 2013-10-28
  • 2021-04-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
相关资源
最近更新 更多