【问题标题】:R - How to turn a loop to a function in RR - 如何将循环转换为 R 中的函数
【发布时间】:2011-03-25 08:53:39
【问题描述】:

感谢您的阅读。我经常发现我需要对数据切片应用一个函数,然后绑定输出。我通常为此目的构建一个循环,但我确信我做错了,在 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

【问题讨论】:

  • 对于初学者,请在您的代码中添加一些空格,以便人们阅读!缩进块,换行等。谢谢!
  • 对此我深表歉意。我是新来的。

标签: r loops if-statement


【解决方案1】:

plyr 包是专门为处理此类数据操作问题而构建的。查看网页上的一些文档:http://had.co.nz/plyr/

我不完全理解您使用的 round() 语法,但我相信等效的 plyr 调用会是

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

我不完全确定这会做你想要的。你的代码有点不透明。

【讨论】:

  • 就像魔术一样!感谢您花时间帮助我。这是一个很好的方向。在看到你的消息之前,我碰巧下载了 plyr 包 10。
猜你喜欢
  • 2020-11-02
  • 2021-12-29
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
相关资源
最近更新 更多