2013-04-20 47 views
0

我在将函数的输出存储到变量中时遇到了问题。我认为最好给出我想要解决的问题的一些背景。 假设玩家“a”和“R”打网球的比赛中,runningScoreFn求和pointHistory载体,在一个不错的data.frame将函数的输出存储到变量中R

runningScoreFn = function(pointHistory){ 
playerUni = c("a", "r") 
cols = sapply(playerUni, function(thisPlayer){ 
cumsum(pointHistory == thisPlayer) 
}) 
names(cols) = playerUni 
cbind(pointHistory, as.data.frame(cols)) 
} 

播放出来的“一个游戏的oneEpxiermentGameFn把一切融合在一起“vs”r“。第一个赢得4分的球员赢得比赛,但他必须领先至少2分。 “r”有60%的几率赢得一分。

pRogerPoint = 0.6 

oneExperimentGameFn = function(pRogerPoint){ 
game = c(rep("r",pRogerPoint * 100), rep("a", 100-pRogerPoint*100)) 
i = 4 
keepGoing = TRUE 
while(keepGoing){ 
whosePoint = sample(game, size=i, replace=TRUE) 
if(sum(whosePoint=="r")-sum(whosePoint=="a")>=2){ 
success = TRUE 
print(cbind(runningScoreFn(whosePoint),success=success)) 
keepGoing = FALSE 
}else if(sum(whosePoint=="a")-sum(whosePoint=="r")>=2){ 
success = FALSE 
print(cbind(runningScoreFn(whosePoint),success=success)) 
keepGoing = FALSE 
} 
i=i+1 
} 
} 

pRogerGameFn显示罗杰赢得比赛的概率。

pRogerGameFn = function(pRogerPoint, NExperiments){ 
RogerGameFn = lapply(1:NExperiments,function(dummy){ 

ok=oneExperimentGameFn(pRogerPoint) 
})} 

这里我希望将输出存储到变量ok中,但是ok返回NULL。我认为这与我的oneExperimentGameFn有关。 我也试过ok = RogerGameFn,但是ok也返回NULL。

回答

1

从函数oneExperimentGameFn没有任何返回。 如果有要返回的特定值,请在该函数的末尾(或其他适当的地方)插入return(.)命令。

如果你只是想赶上打印语句,你可以使用capture.output(.)

ok <- capture.output(oneExperimentGameFn(pRogerPoint))