problème avec apply et pull dans une fonction
Bonjour,
je voulais appliquer à une fonction le même schéma de traitement que celui ci-dessous
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| l1<- c(1,2,3)
l2<- c(5,6,7)
l3<-c(10,11,12)
tableau <- tibble(l1,l2,l3)
test <- function(donnees)
{
t <-sum(donnees)
return(t)
}
res= c(
test(tableau[,1]),
test(tableau[,2]),
test(tableau[,3])
)
apply(tableau,2,test) |
Ici res donne le même résultat que l'apply final
cependant avec une fonction plus compexe et d'autres données, j'obtiens une erreur que je n'arrive pas à fixer avec une erreur sur la fonction pull que je n'arrive pas à cerner.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| l1<- c("01","02","03")
l2<- c("10","020","030")
l3<-c('xx','rr','tt')
tableau <- tibble(l1,l2,l3)
modalite_correcte=c("01","02","03","tt")
test <- function(donnees,modalite_reference=modalite_correcte)
{
t <- dplyr::pull(donnees) %in% modalite_reference
return(sum(t))
}
res= c(
test(tableau[,1]),
test(tableau[,2]),
test(tableau[,3])
)
apply(tableau,2,test) |
Citation:
Error in UseMethod("pull") : no applicable method for 'pull' applied to an object of classe "character"
Je dois louper quelque chose de gros, R débutant, je pense que c'est une notion d'objet ou quelque chose comme ça que je loupe.
Si vous pouviez m'indiquer des pistes...
Merci
problème dans une fonction
Bonjour,
La différence est liée à l'utilisation du tibble. Il n'y a pas de problème avec les dataframes :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| l1 <- c("01", "02", "03")
l2 <- c("10", "020", "030")
l3 <- c('xx', 'rr', 'tt')
tableau <- data.frame(l1,l2,l3)
tableau
#> l1 l2 l3
#> 1 01 10 xx
#> 2 02 020 rr
#> 3 03 030 tt
modalite_correcte=c("01","02","03","tt")
test <- function(donnees,modalite_reference=modalite_correcte)
{
t <- donnees %in% modalite_reference
return(sum(t))
}
res <- c(
test(tableau[,1]),
test(tableau[,2]),
test(tableau[,3])
)
res
#> [1] 3 0 1
res <- apply(tableau,2,test)
res
#> l1 l2 l3
#> 3 0 1
# Created on 2020-09-05 by the reprex package (v0.3.0) |
Je vous conseille par ailleurs de créer vos dataframes ou tibbles ligne par ligne, c'est plus lisible :
Code:
1 2 3 4 5 6
| tableau <- read.table(header=TRUE, check.names=FALSE, colClasses = "character", text="
l1 l2 l3
01 10 xx
02 020 rr
03 030 tt
") |
Cordialement,