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