関数の出力を変数に格納するのに問題があります。解決しようとしている問題に何らかの文脈を与えることが最善だと思います。プレーヤー "a" と "r" がテニスの試合をするとします。runningScoreFn は pointHistory ベクトルを合計し、すべてを素敵な data.frame にまとめます。
runningScoreFn = function(pointHistory){
playerUni = c("a", "r")
cols = sapply(playerUni, function(thisPlayer){
cumsum(pointHistory == thisPlayer)
})
names(cols) = playerUni
cbind(pointHistory, as.data.frame(cols))
}
"a" 対 "r" のゲームをプレイする oneEpxiermentGameFn。最初に 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 を返します。