1

関数の出力を変数に格納するのに問題があります。解決しようとしている問題に何らかの文脈を与えることが最善だと思います。プレーヤー "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 を返します。

4

1 に答える 1

2

関数からは何も返されませんoneExperimentGameFn。返してほしい特定の値がある場合はreturn(.)、関数の最後 (またはその他の適切な場所) にコマンドを挿入します。

単に印刷ステートメントをキャッチしたい場合は、次を使用できますcapture.output(.)

 ok <- capture.output(oneExperimentGameFn(pRogerPoint))
于 2013-04-21T00:12:25.630 に答える