2014-02-07 48 views
0

所以我有一個代碼,我正在爲遊戲工作。這裏遊戲並不重要,但是這裏是我的代碼中產生問題的部分。實質上,我希望函數能夠接受士兵類型的輸入,然後用每個資源的數量代替構建任何給定數量的士兵。我將函數的後半部分編寫並工作得很好,但它是我遇到的變量賦值問題。如果其他語句和賦值變量

cost=function(troop,from,to){ 
    troop=c("phalanx","druidrider","pathfinder") 
    if(troop=="phalanx"){ 
     w=100 
     cl=130 
     i=55 
     cr=30 
    } else if(troop=="druidrider"){ 
     w=360 
     cl=330 
     i=280 
     cr=120 
    } else if(troop=="pathfinder"){ 

依此類推。我想知道幾件事情:首先,有沒有更有效的方法來做到這一點?我希望能夠輸入「cost(phalanx,30,50)」,它會自動使用我試圖分配給方陣的資源w,cl,i,cr的值,並將其替換爲剩餘的方程。它給我一個錯誤說,

Warning message: 
In if (troop == "phalanx") { : 
the condition has length > 1 and only the first element will be used 

我做錯了什麼?

謝謝!

+1

這是什麼編程語言? (另外,那些'+'在你的代碼或Markdown的行部分開頭出錯了嗎?) – jwodder

+0

troop = c(「phalanx」,「druidrider」,「pathfinder」)是做什麼的? –

+0

它是在R我認爲部隊= c(「方陣」,「druidrider」,「探路者」)將擺脫這個錯誤,因爲它會說「方陣未定義」+符號剛剛開始的代碼當我複製並粘貼 – user3084629

回答

1

你在你的函數中犯了一個錯誤。你不可以重新指派部隊。

cost=function(troop,from,to){ 
    #troop=c("phalanx","druidrider","pathfinder") 
    if(troop=="phalanx"){ 
     w=100 
     cl=130 
     i=55 
     cr=30 
    } else if(troop=="druidrider"){ 
     w=360 
     cl=330 
     i=280 
     cr=120 
    } else if(troop=="pathfinder"){ 

就讓指出troop =一部分。如果你有它,隊伍是一個矢量,然後if不知道它應該比較哪個矢量元素。在你的代碼寫出來if(troop=="phalanx")if(c("phalanx","druidrider","pathfinder") == "phalanx")這沒有意義(因爲它給出了一個布爾向量TRUE, FALSE, FALSE和只使用第一TRUE

3

該警告是因爲troop是3個元素的向量,當你做比較:troop=="phalanx"它返回一個帶有3個值(TRUE,FALSE,FALSE)的邏輯向量,然後傳遞給if語句,該語句期望有一個邏輯值,但它接收3,因此忽略最後2個並執行代碼基於第一個值

目前尚不清楚您在此嘗試做什麼,但可能更簡單的方法是使用您的值創建列表列表nt,那麼您可以通過名稱訪問子列表以獲取與該名稱關聯的一組值。