我是一名C#程序员,他被要求在R中做一些工作。我需要弄清楚如何多次调用一个函数来传递数据帧的“块”;对于前两列不同的所有行,我需要调用一次函数。
这就是我的意思:
Stratum<-c("FPN", "FPN", "FPN", "MPN", "MPN", "MPN")
Cal<-c("ynnn", "ynnn", "yynn", "ynnn", "ynnn", "yynn")
Band.1<-c(1,2,1,1,2,1)
Band.2<-c(2,3,2,2,3,2)
Regroup<-c("No","Yes","No","Yes","No","No")
decs.data<-data.frame(Stratum,Cal,Band.1,Band.2,Regroup,stringsAsFactors=FALSE)
Stratum Cal Band.1 Band.2 Regroup
FPN ynnn 1 2 No
FPN ynnn 2 3 Yes
FPN yynn 1 2 No
MPN ynnn 1 2 Yes
MPN ynnn 2 3 No
MPN yynn 1 2 No
对于上面的数据我会调用该函数四次 - 一次传递decdsdata的所有行,其中Stratum =“FPN”和Cal =“ynnn”,然后Stratum =“FPN”和Cal =“ yynn“等等。
该函数不会对这些行进行操作,它会使用它们来确定从光盘加载哪个数据文件以及如何处理它。
我如何在R中以这种方式调用函数?我确信'申请'必须参与,但我正在努力弄清楚如何。
更新: 我不需要data.frame中的所有行作为函数的参数,只需要匹配的行(即第一次调用的行1和2,第二次调用3,第3调用4&amp; 5和第5节。
该功能将根据Stratum&amp ;;加载数据文件。然后,Cal列(例如FPN.ynnn.rdata)根据Band.1,Band.2和Regroup列决定如何处理它。
基本上,decs.data不是我想要操作的数据,而是一个决策矩阵,用于定义哪些频段需要重新分组rdata文件。
答案 0 :(得分:4)
您正在寻找by
。如果您想在decs.data
的子集上运行您的函数,使用Stratum
和Cal
作为拆分变量,您可以执行以下操作:
by(decs.data,decs.data[c('Stratum','Cal')],function)
function
是你的职能。