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
   AssignmentId    Approve                   
1          5135          1 
2          8963          0
3          6823          0
4          3287          1

基本的に、「承認」列に「1」があるすべてのエントリに対して「ApproveAssignment」関数を実行したいと思います。問題は、 ApproveAssignment 関数で同じインデックス (同じ i) を使用したいということです。残念ながら、これはうまくいかないようです。この問題を回避する穏やかな方法はありますか?

編集: Approve Assignment 関数は、API を介して Mechanical Turk の特定の割り当てを承認する関数であり、MTurkR パッケージの一部です。

どんな助けでも大歓迎です!

4

3 に答える 3

3

Youyループの「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

ApproveAssignmentAssignmentIds のベクトルをRejectAssignment内部的にループして割り当て固有の 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 に答える