использование by и mapply вместе

Привет, я пытаюсь получить ICC для значения, зависящего от набора уровней факторов. Например:

usr1<-data.frame(a1=1:5,a2=11:15,a3=21:25,bin=factor(c("a","b","a","a","b")))
usr2<-data.frame(a1=2:6,a2=12:16,a3=32:36)

Я хотел бы ICC a1, a2 и a3, где бункер - это a и b. Перед обработкой фактора я использовал mapply

mapply(function(x,y){z<-data.frame(x,y);icc(z,model="t",type="a")},usr1[,-4],usr2)

Я не могу понять, как обернуть это, чтобы сделать это для каждого уровня фактора.

mapply(function(x,y){z<-data.frame(x,y);icc(z,model="t",type="a")},usr1[c(1,3,4),-4],usr2[c(1,3,4),])

должен дать вам правильный ответ для уровня «а» и

mapply(function(x,y){z<-data.frame(x,y);icc(z,model="t",type="a")},usr1[c(2,5),-4],usr2[c(2,5),])

должен дать вам правильный ответ для уровня "b".

Это очень упрощенная версия моей задачи, где мне нужно рассчитать более 200 ICC для 20 уровней. Я не знаю заранее, какие строки имеют какие факторы, за исключением того факта, что они у меня есть в data.frame.
Спасибо.

ИЗМЕНИТЬ

Ожидаемый результат будет таким....

usr1$bin:a
           a1          a2          a3          
subjects   3           3           3           
raters     2           2           2           
model      "twoway"    "twoway"    "twoway"    
type       "agreement" "agreement" "agreement" 
unit       "single"    "single"    "single"    
icc.name   "ICC(A,1)"  "ICC(A,1)"  "ICC(A,1)"  
value      0.8235294   0.8235294   0.03713528  
r0         0           0           0           
Fvalue     -5.2542e+15 -5.2542e+15 1.094625e+14
df1        2           2           2           
df2        1           1           1           
p.value    1           1           6.758531e-08
conf.level 0.95        0.95        0.95        
lbound     0.005803109 0.005803109 4.823719e-05
ubound     0.9944658   0.9944658   0.5976005   
------------------------------------------------------
usr1$bin:b
           a1          a2          a3          
subjects   2           2           2           
raters     2           2           2           
model      "twoway"    "twoway"    "twoway"    
type       "agreement" "agreement" "agreement" 
unit       "single"    "single"    "single"    
icc.name   "ICC(A,1)"  "ICC(A,1)"  "ICC(A,1)"  
value      0.9         0.9         0.06923077  
r0         0           0           0           
Fvalue     Inf         Inf         Inf         
df1        1           1           1           
df2        1           1           1           
p.value    0           0           0           
conf.level 0.95        0.95        0.95        
lbound     0.01370303  0.01370303  0.0001148084
ubound     0.9998285   0.9998285   0.9796676   

person HowYaDoing    schedule 12.01.2016    source источник
comment
Можете ли вы показать ожидаемый результат   -  person akrun    schedule 12.01.2016


Ответы (1)


Вы можете обернуть lapply для разных bin:

res<-lapply(unique(usr1$bin),function(x){  
  mapply(function(x,y){z<-data.frame(x,y);icc(z,model="t",type="a")},usr1[usr1$bin==x,-4],usr2[usr1$bin==x,])
})
names(res)<-unique(usr1$bin)
person fishtank    schedule 12.01.2016
comment
Спасибо @fishtank, я застрял на использовании из-за того, что не подумал о lapply. - person HowYaDoing; 12.01.2016