使用Knit不返回值

时间:2015-05-17 06:43:30

标签: r knitr

我正在尝试使用以下函数从函数返回一个表和一些值:

void InsertUser(User user){

var exists = SomeExternal.UserExists(user);

if(exists)
throw new Exception("bla bla bla");

//Insert codes here
}

它应该返回一个表和最小标准偏差,但它只返回一个错误。如果我删除`r TabelaTipos("T")` `r MinDPA` ,它会像魅力一样返回表格,但如果我保留它,我会得到:

r MinDPA

我用来产生结果的功能是:

Error in eval(expr,envir,enclos): object 'MinDPA' not found Calls: <anonymous> ... in_dir -> inline_exec -> withVisible -> eval -> stopped execution

我测试过很多东西。如果我在控制台上运行代码它可以工作,但如果我在Knit运行它,它不会。 最奇怪的是,这是有效的

TabelaTipos <- function(Qual){
TiposMotivA <- DadosA[,6:58]
TiposMotivB <- DadosB[,6:58]
LinhasA <- nrow(TiposMotivA)
LinhasB <- nrow(TiposMotivB)
ColunasA <- ncol(TiposMotivA)
ColunasB <- ncol(TiposMotivB)
colnames(TiposMotivA) <- paste("Q",1:ColunasA,sep="")
colnames(TiposMotivB) <- paste("Q",1:ColunasB,sep="")
TiposMotivA <- TiposMotivA[complete.cases(TiposMotivA),]
TiposMotivB <- TiposMotivB[complete.cases(TiposMotivB),]
ModaLinhaA <- apply(TiposMotivA[,1:21], 1, function(x) sum(x == Mode(x)))
ModaLinhaB <- apply(TiposMotivB[,1:21], 1, function(x) sum(x == Mode(x)))
TiposMotivA <- TiposMotivA[ModaLinhaA/21 < .762,]
TiposMotivB <- TiposMotivB[ModaLinhaB/21 < .762,]
ModaLinhaC <- apply(TiposMotivA[,22:53],1, function(x) sum(x == Mode(x)))
ModaLinhaD <- apply(TiposMotivB[,22:53],1, function(x) sum(x == Mode(x)))
TiposMotivA <- TiposMotivA[ModaLinhaC/21 < .762,]
TiposMotivB <- TiposMotivB[ModaLinhaD/21 < .762,]
TiposMotivA <- cbind(TiposMotivA,FIB = rowSums(TiposMotivA[,22:53]))
TiposMotivB <- cbind(TiposMotivB,FIB = rowSums(TiposMotivB[,22:53]))
switch(Qual,
       "T"={
         # Ok  
       },
       "MF"={
           TiposMotivA <- TiposMotivA[TiposMotivA$FIB>=81,]
           TiposMotivB <- TiposMotivB[TiposMotivB$FIB>=81,]
       },
       "F"={
           TiposMotivA <- TiposMotivA[TiposMotivA$FIB>=61 & TiposMotivA$FIB <81,]
           TiposMotivB <- TiposMotivB[TiposMotivB$FIB>=61 & TiposMotivB$FIB <81,]
       },
       "S"={
           TiposMotivA <- TiposMotivA[TiposMotivA$FIB>=41 & TiposMotivA$FIB <61,]
           TiposMotivB <- TiposMotivB[TiposMotivB$FIB>=41 & TiposMotivB$FIB <61,]
       },
       "I"={
           TiposMotivA <- TiposMotivA[TiposMotivA$FIB>=21 & TiposMotivA$FIB <41,]
           TiposMotivB <- TiposMotivB[TiposMotivB$FIB>=21 & TiposMotivB$FIB <41,]
       },
       "MI"={
           TiposMotivA <- TiposMotivA[TiposMotivA$FIB <20,]
           TiposMotivB <- TiposMotivB[TiposMotivB$FIB <20,]
       },stop("Ok")
       )
    TiposA <- transmute(TiposMotivA, A=(Q1+Q11)/2,B=(Q10+Q21)/2,C=(Q6+Q15)/2,D=(Q5+Q14)/2,E=(Q9+Q20)/2,F=(Q7+Q16)/2,G=(Q2+Q17)/2,H=(Q4+Q13)/2,I=(Q3+Q8+Q19)/3,J=(Q12+Q18)/2,K=(A+B+C)/3,L=(D+E+F)/3,M=(G+H)/2,N=(I+J)/2)
    TiposB <- transmute(TiposMotivB, A=(Q1+Q11)/2,B=(Q10+Q21)/2,C=(Q6+Q15)/2,D=(Q5+Q14)/2,E=(Q9+Q20)/2,F=(Q7+Q16)/2,G=(Q2+Q17)/2,H=(Q4+Q13)/2,I=(Q3+Q8+Q19)/3,J=(Q12+Q18)/2,K=(A+B+C)/3,L=(D+E+F)/3,M=(G+H)/2,N=(I+J)/2)
ResultTiposAB <- format(round(matrix(c(mean(TiposA$A),mean(TiposA$B),mean(TiposA$C),mean(TiposA$D),mean(TiposA$E),mean(TiposA$F),mean(TiposA$G),mean(TiposA$H),mean(TiposA$I),mean(TiposA$J),mean(TiposA$K),mean(TiposA$L),mean(TiposA$M),mean(TiposA$N),Mode(TiposA$A),Mode(TiposA$B),Mode(TiposA$C),Mode(TiposA$D),Mode(TiposA$E),Mode(TiposA$F),Mode(TiposA$G),Mode(TiposA$H),Mode(TiposA$I),Mode(TiposA$J),Mode(TiposA$K),Mode(TiposA$L),Mode(TiposA$M),Mode(TiposA$N),sd(TiposA$A),sd(TiposA$B),sd(TiposA$C),sd(TiposA$D),sd(TiposA$E),sd(TiposA$F),sd(TiposA$G),sd(TiposA$H),sd(TiposA$I),sd(TiposA$J),sd(TiposA$K),sd(TiposA$L),sd(TiposA$M),sd(TiposA$N),mean(TiposB$A),mean(TiposB$B),mean(TiposB$C),mean(TiposB$D),mean(TiposB$E),mean(TiposB$F),mean(TiposB$G),mean(TiposB$H),mean(TiposB$I),mean(TiposB$J),mean(TiposB$K),mean(TiposB$L),mean(TiposB$M),mean(TiposB$N),Mode(TiposB$A),Mode(TiposB$B),Mode(TiposB$C),Mode(TiposB$D),Mode(TiposB$E),Mode(TiposB$F),Mode(TiposB$G),Mode(TiposB$H),Mode(TiposB$I),Mode(TiposB$J),Mode(TiposB$K),Mode(TiposB$L),Mode(TiposB$M),Mode(TiposB$N),sd(TiposB$A),sd(TiposB$B),sd(TiposB$C),sd(TiposB$D),sd(TiposB$E),sd(TiposB$F),sd(TiposB$G),sd(TiposB$H),sd(TiposB$I),sd(TiposB$J),sd(TiposB$K),sd(TiposB$L),sd(TiposB$M),sd(TiposB$N)),ncol=6),digits=2),decimal.mark=",")
rownames(ResultTiposAB) <- c("Autodeterminação","Hedonismo","Estimulação","Segurança","Tradição","Conformidade","Poder","Realização","Universalismo","Benevolência","Abertura à mudança","Conservação","Autopromoção","Autotranscedência")
colnames(ResultTiposAB) <- c("Média","Moda","Desvio Padrão","Média","Moda","Desvio Padrão")
ResultTiposAB.table <- as.table(ResultTiposAB)
MinDP <- format(round(min(c(sd(TiposA$A),sd(TiposA$B),sd(TiposA$C),sd(TiposA$D),sd(TiposA$E),sd(TiposA$F),sd(TiposA$G),sd(TiposA$H),sd(TiposA$I),sd(TiposA$J),sd(TiposA$K),sd(TiposA$L),sd(TiposA$M),sd(TiposA$N),sd(TiposB$A),sd(TiposB$B),sd(TiposB$C),sd(TiposB$D),sd(TiposB$E),sd(TiposB$F),sd(TiposB$G),sd(TiposB$H),sd(TiposB$I),sd(TiposB$J),sd(TiposB$K),sd(TiposB$L),sd(TiposB$M),sd(TiposB$N))), digits=2),decimal.mark=",")
MaxDP <- format(round(max(c(sd(TiposA$A),sd(TiposA$B),sd(TiposA$C),sd(TiposA$D),sd(TiposA$E),sd(TiposA$F),sd(TiposA$G),sd(TiposA$H),sd(TiposA$I),sd(TiposA$J),sd(TiposA$K),sd(TiposA$L),sd(TiposA$M),sd(TiposA$N),sd(TiposB$A),sd(TiposB$B),sd(TiposB$C),sd(TiposB$D),sd(TiposB$E),sd(TiposB$F),sd(TiposB$G),sd(TiposB$H),sd(TiposB$I),sd(TiposB$J),sd(TiposB$K),sd(TiposB$L),sd(TiposB$M),sd(TiposB$N))),digits=2),decimal.mark=",")
MinDPA <- format(round(min(c(sd(TiposA$A),sd(TiposA$B),sd(TiposA$C),sd(TiposA$D),sd(TiposA$E),sd(TiposA$F),sd(TiposA$G),sd(TiposA$H),sd(TiposA$I),sd(TiposA$J),sd(TiposA$K),sd(TiposA$L),sd(TiposA$M),sd(TiposA$N))), digits=2),decimal.mark=",")
MinDPB <- format(round(min(c(sd(TiposB$A),sd(TiposB$B),sd(TiposB$C),sd(TiposB$D),sd(TiposB$E),sd(TiposB$F),sd(TiposB$G),sd(TiposB$H),sd(TiposB$I),sd

(TiposB$J),sd(TiposB$K),sd(TiposB$L),sd(TiposB$M),sd(TiposB$N))),digits=2),decimal.mark=",")
MaxDPA <- format(round(max(c(sd(TiposA$A),sd(TiposA$B),sd(TiposA$C),sd(TiposA$D),sd(TiposA$E),sd(TiposA$F),sd(TiposA$G),sd(TiposA$H),sd(TiposA$I),sd(TiposA$J),sd(TiposA$K),sd(TiposA$L),sd(TiposA$M),sd(TiposA$N))), digits=2),decimal.mark=",")
MaxDPB <- format(round(max(c(sd(TiposB$A),sd(TiposB$B),sd(TiposB$C),sd(TiposB$D),sd(TiposB$E),sd(TiposB$F),sd(TiposB$G),sd(TiposB$H),sd(TiposB$I),sd(TiposB$J),sd(TiposB$K),sd(TiposB$L),sd(TiposB$M),sd(TiposB$N))),digits=2),decimal.mark=",")
return(kable(ResultTiposAB.table, format = "markdown", align = "r"))
}

但其中任何一个都没有用

`r MinDP`
`r MaxDP`

这是我的数据:

`r MinDPA`
`r MinDPB`
`r MaxDPA`
`r MaxDPB`

关于我做错了什么的线索?

1 个答案:

答案 0 :(得分:2)

您不会将函数的结果分配给对象,因此它将被丢弃,之后您无法访问它。尝试类似:

## In the function definition
return(list(c(MinDPA, MinDPB, MaxDPA, MaxDPB),
            kable(ResultTiposAB.table, format = "markdown", align = "r"))

## Afterwards :
result <- TableaTipos("T")

## print MinDPA
result[[1]][1]

## print kable
print(result[[2]])

此外,您的功能中不应该有两个返回调用。要么将它们合并到列表中,要么只打印表而不是返回它。

## Function Definition
return(c(MinDPA, MinDPB, MaxDPA, MaxDPB))
print(kable(ResultTiposAB.table, format = "markdown", align = "r"))

OR

result$MinDPA

最后,如果你想用return(data.frame(MinDPA=MinDPA, MinDPB=MinDPB, MaxDPA=MaxDPA, MaxDPB=MaxDPB)) result <- TableaTipos("T") ## print MinDPA result$MinDPA 之类的东西调用你的MinDPA,你应该返回一个data.frame而不是vector:

{{1}}