if else语句和赋值变量

时间:2014-02-07 19:32:10

标签: r if-statement variable-assignment

所以我有一个我正在为游戏工作的代码。游戏在这里无关紧要,但这是我的代码中产生问题的部分。本质上,我希望函数接受士兵类型的输入,然后用每个资源的数量来代替构建任何给定数量的士兵。我已经编写了函数的后半部分并且工作正常,但是我遇到了麻烦的变量赋值。

 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

我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

警告是因为troop是一个包含3个元素的向量,当你进行比较时:troop=="phalanx"它返回一个带有3个值的逻辑向量(TRUE,FALSE,FALSE)。然后将其传递给期望单个逻辑值的if语句,但它接收3,因此它忽略最后的2并根据第1个值执行代码。

目前尚不清楚您在这里尝试做什么,但创建一个包含所需值的列表列表可能更简单,然后您可以按名称访问子列表以获取与之关联的值集那个名字。

答案 1 :(得分: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 =部分出来。如果你有它,troop是一个向量,然后if不知道它应该与哪个向量元素进行比较。在您的代码中写出if(troop=="phalanx") if(c("phalanx","druidrider","pathfinder") == "phalanx")这是没有意义的(因为它提供了一个布尔向量TRUE, FALSE, FALSE,并且只使用了第一个TRUE