我正在尝试使用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包的一部分
非常感谢任何帮助!
答案 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)
ApproveAssignment
和RejectAssignment
在内部循环遍历AssignmentIds向量,以对API进行特定于任务的调用,因此您只需要为它提供一个AssignmentIds向量,不需要循环或任何条件。
ApproveAssignment(assignments=assignmentlist$AssignmentId[assignmentlist$Approve==1],sandbox=T)
RejectAssignment(assignments=assignmentlist$AssignmentId[!assignmentlist$Approve==1],sandbox=T)