在R中使用带有if else语句的循环

时间:2013-04-09 13:20:02

标签: r mechanicalturk

我正在尝试使用if else语句创建一个for循环。我的代码如下所示:

for(i in 1:length(assignmentlist[,1]))
{if assignmentlist$Approve[i]=="1"
      {ApproveAssignment(assignments=assignmentlist$AssignmentId[i],sandbox=T)}
  else {RejectAssignment(assignments=assignmentlist$AssignmentId[i],sandbox=T)}}

而“assignmentlist”看起来如下

> assignmentlist
   AssignmentId    Approve                   
1          5135          1 
2          8963          0
3          6823          0
4          3287          1

基本上我想对“Approve”列中具有“1”的所有条目执行“ApproveAssignment”函数。问题是,我想在ApproveAssignment函数中使用相同的索引(相同的i) 。不幸的是,这似乎不起作用。有没有人有温和的方法来避免这个问题?

编辑:批准分配功能是一个功能,它通过API批准Mechanical Turk的某个分配,并且是MTurkR包的一部分

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

我不明白这一点,因为你循环的“i”可以直接用在你的函数中:

ApproveAssignment <- function(assignments=NULL, sandbox=NULL) cat(i, "was approved\n")
RejectAssignment <- function(assignments=NULL, sandbox=NULL) cat(i, "was rejected\n")

for(i in 1:length(assignmentlist[,1])){
  if (assignmentlist$Approve[i]=="1")
    ApproveAssignment(assignments=assignmentlist$AssignmentId[i],sandbox=T)
  else
    RejectAssignment(assignments=assignmentlist$AssignmentId[i],sandbox=T)
    }

答案 1 :(得分:0)

如果,我假设我想在其中使用它,你是ApproveAssignment的作者,你应该将索引作为附加参数传递给函数。

ApproveAssignment <- function(assignments, sandbox, index) { ... }

答案 2 :(得分:0)

ApproveAssignmentRejectAssignment在内部循环遍历AssignmentIds向量,以对API进行特定于任务的调用,因此您只需要为它提供一个AssignmentIds向量,不需要循环或任何条件。

ApproveAssignment(assignments=assignmentlist$AssignmentId[assignmentlist$Approve==1],sandbox=T)
RejectAssignment(assignments=assignmentlist$AssignmentId[!assignmentlist$Approve==1],sandbox=T)