【问题标题】:Output R loop content and output in knitr html输出R循环内容并在knitr html中输出
【发布时间】:2015-03-08 08:46:47
【问题描述】:

我正在写一些东西,我使用循环在多个数据帧上运行一个函数(或集合)。当我将它编织到 html(在 RStudio 中)时,我希望能够(a)查看循环变量,以及(b)创建的输出。 所以如果我有一块:

```{r}
dflist <- list(ISEQ0=ISEQ0,ISEQ1=ISEQ1,ISEQ2=ISEQ2,ISEQ3=ISEQ3)
for(i in dflist){
 head(i)
}
```

编织的文档会显示:

头部(ISEQ0)

..................(头部内容)

头部(ISEQ1)

.....................(头部内容)

等等。我查看了stackoverflow、文档和一般网络搜索,并看到了一些对绘图循环的引用(这似乎有效),但据我所知,这种循环没有任何内容。我的目的是在不同的数据集上运行一组统计数据(我更熟悉循环而不是应用,我猜它在这里没有什么区别)我认为这可能是一个相当常见的用例。

根据下面的评论,我似乎有一个按预期工作的简短版本:

ISEQList <- list(ISEQ0=ISEQ0,ISEQ1=ISEQ1,ISEQ2=ISEQ2,ISEQ3=ISEQ3)
for(ISEQData in ISEQList){
print(head(ISEQData))
print(cor(ISEQData))
}

在我的完整块中仍然有一些东西不起作用(我只得到了第一次迭代) 但完整的块不是。我尝试过 cat 和 print,我只是想打印第一个元素(cor(ISEQData),但它不起作用,所以我想知道是否将输出存储为变量(而不是尝试在“计算期间”打印)会有所帮助 - 它似乎没有,但它们并不都需要像下面的块那样存储。我一直在将函数一个一个地移动到短块中,我认为 vss 之后的一切都是有问题的。 ..但我不明白为什么。

for(ISEQData in ISEQList){
  n <- n +1
a <- cor(ISEQData)
###################################Explore factor options##############
b <- vss(ISEQData,n=9,rotate="oblimin",diagonal=F,fm="ml") 
c <- EFA.Comp.Data(Data=ISEQData, F.Max=9, Graph=T) #uses EFA Comparison Data.R
d <- fa.parallel(ISEQData) 
# Determine Number of Factors to Extract using N Factors library
ev <- eigen(cor(ISEQData)) # get eigenvalues
ap <- parallel(subject=nrow(ISEQData),var=ncol(ISEQData),rep=100,cent=.05)
nS <- nScree(x=ev$values, aparallel=ap$eigen$qevpea)
pnS <- plotnScree(nS) 
#######################################################
for(x in 2:5){
  assign(paste0("fitml",x,"ISEQ",n),fa(r = ISEQData, nfactors = x, rotate = "oblimin",     fm = "ml",residuals=T))
}
e<-fitml2$loadings
f<-fitml3$loadings
m<-fit # print results 
p<-factor.scores(ISEQData,fit)
q<-factor.stats(f=fit)
r<-fa.diagram(fit)
}

【问题讨论】:

    标签: r for-loop markdown rstudio knitr


    【解决方案1】:

    您应该使用printcat 强制输出:

    ```{r}
    for(i in seq_along(dflist)){
     print(paste('head data set:' , names(dflist)[i]))    ## sub title
     print(head(dflist[[i]]))                             ## content 
     cat(rep("*",20),'\n')                                ##  separator
    }
    ```
    

    【讨论】:

    • 谢谢@agstudy!我刚刚查看了 print 和 cat 帮助,是打印一些我可以在循环中包含所有内容的东西,例如for(i in lis){ print( { head(i) nrow(i) ncol(i) }) }
    • 使用类似的东西:print(paste(nrow(i) ,ncol(i))) where i is your i not mine.
    • 啊!我现在意识到这与 knitr 本身无关,这些值永远不会在循环中打印,所以它们当然也不在 knitted 文档中。在我的完整代码块中,我在产生输出的单行上尝试了 print 和 cat 方法,并且打印了第一个迭代,但没有打印后续迭代。这正如我所期望的那样工作: for(ISEQData in ISEQList){ print(head(ISEQData)) print(cor(ISEQData)) } 但在我较长的代码块/循环中它没有。再玩一点(不小心按了这个键)。
    猜你喜欢
    • 2012-08-10
    • 2020-10-09
    • 2014-03-18
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    相关资源
    最近更新 更多