我正在尝试使用以下函数从函数返回一个表和一些值:
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`
关于我做错了什么的线索?
答案 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}}