Практикуя строительные функции R (загадка Хантера) - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь улучшить свои навыки написания функций, и я немного запутался в правильной структуре функций. Я искал кучу примеров, но ни один из них не настолько понятен для меня. Моя цель - запустить секцию #RUN over and over в цикле for и создать функцию, которая позволит мне контролировать количество циклов, которые я могу выполнить.

В настоящее время я дошел до этой точки:

set.seed(123)
#Start but setting the conditions and being the Win Lose counters 
Count_Win_Hunt=0 
Count_Win_Moose=0 

#RUN over and over
Hunter=1
Moose=7
win=0

while(win != 1){ a = sample(1:6, 1) # dice roll 
if( a<= 4) {Moose = Moose+a} else{Hunter = Hunter+a}
if( Hunter >= Moose  ) { Count_Win_Hunt = Count_Win_Hunt +1 } else if( Moose >= 12) {Count_Win_Moose = Count_Win_Moose + 1}

if( Hunter >= Moose || Moose >= 12 ) {win = win+1} else {
  #if not condition not meet roll again
  a = sample(1:6, 1) # dice roll
  if( a<= 4) {Moose = Moose+a} else{ Hunter = Hunter+a}}}


# calculated the average win rates 
paste0( round(Count_Win_Hunt/(Count_Win_Hunt+Count_Win_Moose),4)*100,"%"," of the time the Hunter won")
paste0( round(Count_Win_Moose/(Count_Win_Hunt+Count_Win_Moose),4)*100,"%"," of the time the Moose won")

1 Ответ

1 голос
/ 07 ноября 2019

Помимо моих общих проблем с вашим вопросом (пожалуйста, будьте более конкретны относительно вашей реальной проблемы), ваши циклы for имеют неправильный синтаксис. Они должны выглядеть следующим образом:

for (val in sequence)
{
statement
}

Применительно к вашей функции они должны выглядеть следующим образом:

for (val in c(1:4))
{
probability + (hunter,goose+val,num+1)
}

for (val in c(5:6))
{
probability + (hunter,goose+val,num+1)
print probability
}

Однако они не только синтаксически неверны, но и их содержание кажется неправильным.

Например, во втором цикле for, гусь шагает вперед, хотя это должен быть охотник. Также это не два цикла for, но это должен быть оператор if, подобный следующему:

if (val <= 4) {
probability + (hunter,goose+val,num+1)
}
else {
probability + (hunter+val,goose,num+1)
}

Наконец, вся структура вашей функции кажется странной (и имеет ошибочно названные переменные). Не должно ли быть что-то вроде этого:

dice_roll <- function(hunter,goose, win){
# While to check for winning condition
while(win != 1){
 dice_roll = sample(1:6, 1) # simulate dice roll

 # If statement depending on dice roll, increasing value of hunter or goose by dice roll

 # Change win condition
 If(hunter >= goose){
  win <- 1
 }
}

dice_roll(1,7,0)
...