【发布时间】:2017-08-13 08:55:22
【问题描述】:
我正在尝试根据篮球场的某些区域来确定投篮命中率,包括禁区、油漆区(不包括禁区)、所有其他 2 分球、角球 3 分和所有其他 3 分。
我所拥有的是结果(成功或失败)或每个镜头的 x、y 坐标。我试图做的是编写一个 for 循环来获取行和行信息,并使用嵌套的 ifelse 语句检查是否满足多个条件。
for (i in cs){shotarea[i] <- ifelse(x[i] >= -125 & x[i] <= 125 & y[i] < x[i]*tan(acos(x[i]/125)),1,
ifelse(x[i] => -125 & x[i] <= 125 & y[i] < 460 & y[i] > 460-x[i]*tan(acos(x[i]/125)),2,
ifelse(x[i] >= -245 & x[i] < -125 & y[i] < 460,2,
ifelse(x[i] <= 245 & x[i] > 125 & y[i] < 460,2,
ifelse(x[i] >= -660 & x[i] < -245 & y[i] < x[i]*tan(acos(x[i]/675)),3,
ifelse(x[i] > -245 & x[i] < 245 & y[i] < x[i]*tan(acos(x[i]/675)) & y > 460,3,
ifelse(x[i] > 245 & x[i] <= 660 & y[i] < x[i]*tan(acos(x[i]/675)),3,
ifelse(x[i] > -750 & x[i] < -660 & y[i] < x[i]*tan(acos(660/675)),4,
ifelse(x[i] < 750 & x[i] > 660 & y[i] < x[i]*tan(acos(660/675)),4,
ifelse(x[i] > -750 & x[i] < -660 & y[i] > x[i]*tan(acos(660/675)),5,
ifelse(x[i] < 750 & x[i] > 660 & y[i] > x[i]*tan(acos(660/675)),5,
ifelse(x[i] > -660 & x[i] < 660 & y[i] > x[i]*tan(acos(x[i]/675)),5,6))))))))))))}
我用几何函数界定了球场上的所有区域:
限制区域 = x(-125,125), y(inf, xtanacos(x/125))
油漆,不包括限制区域 = (x(-245,-125)U(125,245), y(inf, 460)) 和 (x(-125,125),y(xtanacos (x/125),460))
所有其他 2 = (x(-660,-245)U(245,660),y(inf, x[i]tanacos(x[i]/675)) 和 (x (-245,245),y(460,x[i]tanacos(x[i]/675))
三号角 = x(-750,-660)U(660,750),y(inf,x[i]tanacos(660/675)
所有其他 3 的 = (x(-750,-660)U)(660,750),y(x[i]tanacos(660/675),inf)) 和 (x( -660,660),y(x[i]tanacos(x[i]/675),inf)
x 值的范围是 (-750,750),y 值的范围是 (-87,972),其中 (0,0) 是篮子的中心,x 值的范围是边线到边线。我有几个数据子集,我根据 x 值的范围运行它。我运行一个子集,其中 x 范围 (-125,125),一个运行 (-675,-125)U(125,675),另一个运行 (-750,-675)U(675,750)。 (我这样做是为了防止 arccos() 表达式返回 NAN 作为预防措施,但我认为我实际上不需要这样做)。你还会注意到我使用了一个向量来表示 i 的范围,这样我就可以分出我制作的不同子集。不知道是不是这个问题。
每当我尝试运行它时,我都会得到
Error: unexpected ')' in:"ifelse((x[i] < 750 && x[i] > 660 && y[i] > x[i]*tan*acos(660/675)),5,
ifelse((x[i] > -660 && x[i] < 660 && y[i] > x[i]*tan*acos(x[i]/675)),5,6)))))))))))", > }Error: unexpected '}' in "}"
我仔细检查和三次检查以确保我没有输入多余的括号或括号,但我找不到。所以我想我要的是两件事之一:
可能导致此错误的代码是否存在其他问题?
与/或
你会推荐更好的东西吗?我确信必须有一些“申请”的方式来做到这一点,但我在申请时非常不确定,不知道从哪里开始。
EDIT: For sample data, you could use x <- runif(3580,min=-749,max=749); y <- runif(3580,min=-86,max=971)
EDIT: I went through and made sure the tan() functions had parenthesis, but otherwise removed what I hope are redundant parethenses
【问题讨论】:
-
您也可以通过子集更轻松地完成此任务,但如果没有样本数据集就很难判断。
-
谢谢,我刚刚添加了一些示例数据的编辑。
-
其中一个问题与您的
x[1]*tan*acos()通话有关。tan()是一个函数,需要一个输入。否则它不知道如何处理它。你是想要x[1]*tan(acos())还是 x[1]*tan(x[1])*acos()` -
哦,好点。我想要 x[i]*tan(acos())。我想在脚本中有意外的“)”的恐慌中,我寻找任何可以删除不必要的括号的方法,并且我必须匆忙删除它们。
标签: r for-loop nested conditional