1

我正在尝试使用 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

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

编辑:Approve Assignment 功能是通过 API 批准 Mechanical Turk 的特定分配的功能,并且是 MTurkR 包的一部分

非常感谢您的任何帮助!

4

3 回答 3

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)
    }
于 2013-04-09T13:39:44.270 回答
0

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

ApproveAssignment <- function(assignments, sandbox, index) { ... }
于 2013-04-09T13:32:49.613 回答
0

ApproveAssignmentRejectAssignment在内部循环通过一个 AssignmentIds 向量以对 API 进行特定于分配的调用,因此您所要做的就是为其提供一个 AssignmentIds 向量,无需循环或任何条件。

ApproveAssignment(assignments=assignmentlist$AssignmentId[assignmentlist$Approve==1],sandbox=T)
RejectAssignment(assignments=assignmentlist$AssignmentId[!assignmentlist$Approve==1],sandbox=T)
于 2013-05-02T10:01:54.317 回答