我有一个愚蠢的函数,它通过delta1和delta2更新名为ACC的向量长度中的S值。
Sstart=0 #a starting value for S
ACC=c(1,1,0,1,1) #accuracy: 0 or 1
f=c(1,1,1,1,0) #feedback: 0 or 1
ID=rep(1,5) #ID of the participant
delta1=seq(1,5,1)
delta2=seq(1,5,1)
m<-as.matrix(expand.grid(delta1=delta1, delta2=delta2)) #all the possible combination of delta1 and delta2
该功能如下。当反馈(f)为1时,当ffedback为0时,它以delta1更新S,然后使用delta2。 Delta1和delta2的范围是1到5,我将它们分别递增。
silly_function<-function(delta1, delta2,ACC,f,Sstart){
S = Sstart
for (i in 1:length(ACC)){
if (ACC[i]==1 & f[i]==1){
S[i+1]=S[i]+delta1
}
else if (ACC[i]==1 & f[i]==0){
S[i+1]=S[i]+delta2
}
else if (ACC[i]==0){
S[i+1]=S[i]
}
}
return(S)
}
我调用了函数
N=length(delta1)*length(delta2)
SMat<-matrix(data=NA, nrow=N, ncol=(length(ACC)+1)) #matrix for the data
for (i in 1:N){
SMat[i,] <- silly_function(m[i,1],m[i,2],ACC,f,Sstart)}
我的问题: 该功能适用于1个主题,但我找不到一个聪明的方法将它分别应用于我的所有主题(我有一个数据框,其中我的参与者的所有数据都在一个数据框中)并将结果合并到一个矩阵或数据框。我想从plyr包中使用ddply,但是我找不到类似于我的示例来修改它,并在这种情况下了解如何实现它。 非常感谢您的意见/提示!
我为两位参与者提供的输入
ID Feedback ACC
1 1 1
1 1 1
1 1 0
1 1 1
1 0 1
2 1 1
2 1 1
2 0 1
2 1 0
2 1 1
实际输出
V1 V2 V3 V4 V5 V6
0 1 2 2 3 4 #row1
0 2 4 4 6 7
.
.
0 5 10 10 15 20 #row25
对于主题1,输出为: 25 * 6(行*列)矩阵:25行,因为我通过delta1和delta2的所有可能组合更新S.第一列始终为0,因为Sstart为0。
所需的输出 基本上与主题1相同但具有所有主题数据
主题1的1-25行
主题2的26-50行...