2013-04-20 4 views
0

У меня возникли проблемы с сохранением вывода функции в переменную. Я думаю, что лучше всего дать мне некоторый контекст проблемы, которую я пытаюсь решить. Предположим, что игроки «а» и «г» играть в теннис, то 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, что разыгрывается в игру «а «против« 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)) 
Смежные вопросы