J'essaie d'exécuter une fonction d'ajustement sur une trame de données assez volumineuse, regroupée par une variable nommée "big_group"
et 'small_group'
. En particulier, j'essaie d'obtenir des prédictions et des valeurs de coefficients de small_group
à l'intérieur de big_group
.Erreur: Les résultats ne sont pas des trames de données à des positions:
C'est, j'essaye d'ajouter ces nouvelles colonnes à mon nouveau data.frame à la fin de la fonction do({
.
Certains des groupes de ces données ne peuvent pas être ajustés en raison soit d'un manque de points de données, soit d'une erreur "matrice de gradient singulier à l'estimation initiale des paramètres".
Alors, je tryCatch
méthode de ce poste de how-do-i-ignore-errors-and-continue-processing-list-items et je suit réponse @Koshke
OTH, après avoir résolu cette question, je viens de rencontrer une erreur est dit
Error: Results are not data frames at positions: 3
Il ya quelques discussions à propos de cette erreur, mais je ne pouvais pas comprendre comment implémenter mon problème.
Voici mon exemple reproductible; (Cet exemple est similaire à mon vrai données est la raison pour laquelle j'ai construit l'exemple comme celui-ci)
library(minpack.lm)
library(dplyr)
set.seed(100)
data.list <- lapply(1:2, function(big_group) {
xx <- c(sort(runif(5,1,5)),sort(runif(5,-8,-2)), rep(5,2)) ##I intentionall added the last two 5 to get unfitted groups
yy<- sort(runif(12,0,10))
small_group <- rep(c('a','b','c'),times=c(5,5,2)) ##small groups in under the big_group
df <- data.frame(xx,yy,small_group,big_group)
df <- df%>%
group_by(big_group,small_group)%>%
do({
#fitting part
fit <- tryCatch(nlsLM(yy~k*xx/2+U, start=c(k=1,U=5), data = ., trace=T,
control = nls.lm.control(maxiter=100)),error=function(e) NULL)
if(!("NULL" %in% class(fit))){
new.range<- data.frame(xx=seq(1,10,length.out=nrow(.)))
predicted <- predict(fit, newdata =new.range)
coefs <- data.frame(k=coef(fit)[1],U=coef(fit)[2])
data.frame(., new.range,predicted,coefs,row.names=NULL) ##This is the part the error came from I guess!
}})
})
C'est ce que les données ressemble; @ RomanLuštrik
data.list <- lapply(1:2, function(big_group) {
xx <- c(sort(runif(5,1,5)),sort(runif(5,-8,-2)), rep(5,2)) ##I intentionall added the last two 5 to get unfitted groups
yy<- sort(runif(12,0,10))
small_group <- rep(c('a','b','c'),times=c(5,5,2)) ##small groups in under the big_group
df <- data.frame(xx,yy,small_group,big_group)
})
df <- bind_rows(data.list)
> df
xx yy small_group big_group
1 1.685681 1.302889 a 1
2 2.680406 1.804072 a 1
3 3.153395 3.306605 a 1
4 3.995889 3.486920 a 1
5 4.081206 6.293909 a 1
6 -6.333657 6.952741 b 1
7 -5.070164 7.775844 b 1
8 -4.705420 8.273034 b 1
9 -2.708278 8.651205 b 1
10 -2.428970 8.894535 b 1
11 5.000000 9.541577 c 1
12 5.000000 9.895641 c 1
13 1.830856 1.234872 a 2
14 2.964927 2.114086 a 2
15 3.413297 2.299059 a 2
16 4.121434 2.533907 a 2
17 4.536908 3.577738 a 2
18 -6.807926 4.451480 b 2
19 -6.585834 4.637012 b 2
20 -6.350680 5.913211 b 2
21 -6.157485 5.975753 b 2
22 -6.016821 6.471012 b 2
23 5.000000 6.763982 c 2
24 5.000000 9.605731 c 2
merci homme que j'appriciate vraiment. Laissez-moi vérifier davantage avec mes données réelles et revenir à vous! – Alexander
@Alexander Sure np cheers –
Bonjour, J'ai trouvé un problème avec mes données réelles ainsi que cet exemple reproductible. L'attente est que puisque nous sommes 'group_by (big_group, small_group)' les prédictions et coefficients d'ajustement devraient être différents à l'intérieur de chaque petit groupe. Je suppose que ce code ne fournit pas cela. – Alexander