R - Как превратить цикл в функцию в R - PullRequest
3 голосов
/ 04 августа 2010

Спасибо за ваше чтение. Я часто нахожу, что мне нужно применить функцию к срезам моих данных, а затем связать результаты. Я обычно строю цикл для этой цели, но я уверен, что делаю это неправильно, и что в R я должен использовать другой способ мышления. Не могли бы вы помочь мне узнать лучший способ сделать это?

С благодарностью,

адам

    rm(m); m=0; # this variable will hold the output of the loop
    for (nobs in as.numeric(levels(factor(s1$obs)))) { # go over observer index
       for (nses in as.numeric(levels(factor(subset(s1, obs==nobs)$session)))) { # go over session index
          ns1=subset(s1, obs== nobs & session==nses & ky %in% c(1,2)); # the data slice of interest
          ds=round( clfdMc (ns1),2); cs=round( cfdMc (ns1),2); # apply function to data slice
          rw=cbind(nobs,nses,ds[2,3],ds[3,3],ds[2,3]-ds[3,3], cs[1,3],cs[2,3],nobs+nses/10, ds[2,4],ds[3,4],cs[1,4],cs[2,4]) # create a row from function output
          m=rbind(m,rw); #print(paste('obs:',nobs,' nses:',nses,'clear d:',ds[2,3],'red d',ds[3,3]))# bind new row to previous rows
        }
    }

m=data.frame(m[2:dim(m)[1],]) # create a data frame from these results
names(m)=c('obs','ses','D_clear','D_red','diffD','D_cg-1','D_cg+1','mark','C_clear','C_red','C_cg-1','C_cg+1') # give names to column variables

1 Ответ

6 голосов
/ 04 августа 2010

Пакет plyr был создан специально для решения подобных проблем с манипулированием данными. Ознакомьтесь с некоторыми документами на веб-странице: http://had.co.nz/plyr/

Я не совсем понимаю синтаксис round(), который вы использовали, но я считаю, что эквивалентный вызов plyr будет

library(plyr)
ddply(s1, .(obs, session), transform, ds = round(clfdMc, 2), cs = round(cfdMc, 2))

Я не точно уверен, что это будет делать то, что вы хотите. Ваш код немного непрозрачен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...