2016-10-28 1 views
0

현재 원숭이와 일치하는 샘플 작업을 연구 중입니다. 선택의 정확성에 관계없이 특정 자극이 얼마나 자주 선택되었는지 평가하고 싶습니다."R"의 ifelse에서 함수를 반환 인수로 사용할 수 있습니까?

이렇게하려면 6288 행 6 열 ("원숭이", "세션", "샘플", "일치", "호일", "성공")의 데이터 프레임 df이 있습니다. 세 가지가 중요합니다.

데이터는 df$Matchdf$Foil은 자극 (문자열)의 이름이고 df$Success은 바이너리입니다. df$Matchdf$Foil은 65 개의 별개의 자극 이름으로 구성되어 있습니다.이 자극 이름은 벡터 Match.Foil에 포함되어 있습니다.

이제 모든 6288 번의 시도에서 그림 (벡터 Match.Foil의 일부)이 클릭 된 빈도를 계산하고 싶습니다. 즉, 언제든지 이름은 df$Match & 또는 df$Foil & df$Success == "0" 일 때 일부가됩니다. 당신이 나는 경우가 복귀 기능 Pic.clicked + 1Pic.clicked + 0을 사용하고 싶었 보는 바와 같이,

Pic.clicked= vector(mode="numeric", length= length(Match.Foil)) 

for (i in 1:length(Match.Foil)){ 
    Pic.clicked[i] = ifelse(
      df$Match == Match.Foil[i] & df$Success == "1")| 
       (df$Foil== Match.Foil[i] & df$Success == "0"), 
      Pic.clicked[i] +1, 
      Pic.clicked[i] +0) 
     } 

그래서 :

는이 같은 Match.Foil의 각 부분에 대한 클릭 횟수와 벡터를 구축하려 성명서는 TRUE 또는 FALSE입니다. 작동하지 않으며 오류가 발생합니다.

In Pic.clicked[i] = ifelse((df$Match == Match.Foil[i] & ... : number of items to replace is not a multiple of replacement length

아무도 아이디어가 없나요? 적절한 카운터를 만드는 방법은 무엇입니까? 나는 switch을 사용하는 것에 대해 생각했지만 그 기능에 대한 경험이 없으며 필요로하는 것처럼 작동하지 않는 것 같습니다. 또한 6288 루프를 실행 해 보았지만 동일한 경고가 나타납니다.

+0

을; 짧은 재현 가능한 예가 매우 도움이 될 것입니다. 또한 함수를 반환하려고한다고 말하는 것이 명확하지 않습니다. 'Pic.clicked [i] + 1'은 함수가 아니며 숫자 값입니다. – Aaron

답변

0
부울 벡터에 TRUE 수를 1로 만드는 SUM(), 사용할 수 있습니다

: 우리는 좀 더 정보가 필요

for (i in 1:length(Match.Foil)) { 
    Pic.clicked[i]= sum((Stage4.pics$Match == Match.Foil[i] & Stage4.pics$Success == "1")| 
         (Stage4.pics$Foil== Match.Foil[i] & Stage4.pics$Success == "0")) 
} 
+0

모든 의견을 보내 주셔서 감사합니다! 내가 너무 바빴 기 때문에 나는 아직 대답하지 않았다. 해결책을 찾았습니다. 문제는이 루프 내부의 구문이 아니었지만이 루프를 둘러싼 두 번째 루프가 필요했습니다. 관심있는 사람이 있으면 코드를 게시 할 수 있습니다. 다시 한 번 감사드립니다! –

관련 문제