2017-10-13 4 views
0

J'ai essayé de faire une manipulation sur le jeu de données par défaut Diamond et j'ai trouvé un problème où je dois considérer deux valeurs de colonne cut = ideal et clarity = vs2. Si ces deux sont vraies alors ma fonction renverra le nombre total de ces types de diamants du premier nombre d'échantillons. mon code est le suivant:L'instruction Ifelse à l'intérieur de la fonction apply ne renvoie aucune valeur

idealvs2<- function(n){ 
    k<-0 
    s<-apply(head(diamonds,n),1, function(x)ifelse(diamonds$cut=="Ideal" && diamonds$clarity=="VS2",k<-k+1,k<-k+0)) 
    return(k) 
} 

idealvs2(10) est censé répondre à 3, qui ne se produit pas.

s'il vous plaît aider

+0

Pourriez-vous montrer la sortie prévue pour les 6 premières lignes afin que les autres comprennent ce que tu voulais. Le '&&' devrait être '&'. Quand vous faites un 'apply', il convertit en' matrix', en supposant qu'il y ait des colonnes de facteur, cela pourrait créer un problème – akrun

+0

La sortie attendue pour les 6 premières lignes serait 1. corrigée &, thnks –

+0

Pour 6 lignes, devrait ce soit 2? – akrun

Répondre

0

Ce que nous avons besoin est une fonction simple à sum le vecteur logique (cut == "Ideal" | clarity == "VS2")

f1 <- function(dat, n){ 
     tmp <- head(dat, n) 
     with(tmp, sum(cut== "Ideal" | clarity == 'VS2')) 
} 

f1(diamonds, 10) 
#[1] 3