Ich habe die folgende Funktion:sapply auf data.frame vs Vektor (COLNAMES, rownames)
func <- function(scores, labels, thresholds) {
labels <- if (is.data.frame(labels)) labels else data.frame(labels)
sapply(thresholds, function(t) { sapply(labels, function(lbl) { sum(lbl[which(scores >= t)]) }) })
}
Ich habe auch die folgenden, dass ich in func
bestehen werden.
> scores
[1] 0.187 0.975 0.566 0.793 0.524 0.481 0.005 0.756 0.062 0.124
> thresholds
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
> var1
[1] 1 1 0 0 0 1 0 1 1 1
> df
var1 var2
1 1 0
2 1 1
3 0 0
4 0 0
5 0 0
6 1 1
7 0 1
8 1 1
9 1 1
10 1 0
Hier sind zwei verschiedene Anrufe zwei func
, eines mit labels
als Vektor und die andere mit labels
als data.frame:
> func(scores, var1, thresholds)
labels labels labels labels labels labels labels labels labels labels labels
6 5 3 3 3 2 2 2 1 1 0
> func(scores, df, thresholds)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
var1 6 5 3 3 3 2 2 2 1 1 0
var2 5 3 3 3 3 2 2 2 1 1 0
Warum bedeutet „Etiketten“, wie angewandt erhalten ein Spaltenname in der Vektorversion und "var1" und "var2" werden als rowname in der dat.frame-Version angewendet?
Was ich suche ist der Vektor-Version mehr wie zu sein:
> func(scores, var1, thresholds)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
labels 6 5 3 3 3 2 2 2 1 1 0
Um die oben genannten Variablen zu erstellen:
scores <- sample(seq(0, 1, 0.001), 10, replace = T)
thresholds <- seq(0, 1, 0.1)
var1 <- sample(c(0, 1), 10, replace = T)
var2 <- sample(c(0, 1), 10, replace = T)
df <- data.frame(var1, var2)
Wenn Sie konvertieren möchten 'labels' zu einem' data.frame' Verwendung 'as.data.frame' statt und sehen, ob das hilft –
Danke für Ihre Daten in dieser Frage einschließlich, aber das Format ist ein wenig schwer zu lesen. Wenn Sie Ihre Variablen haben, anstatt die einfache Konsolenausgabe anzuzeigen, zeigen Sie die Ausgabe von 'dput (varName)' oder einfach etwas wie 'scores <- c (0.187, 0.975, 0.566, 0.793, 0.524 , 0,481, 0,005, 0,756, 0,062, 0,124). Dies macht es einfacher, Ihr Problem zu replizieren und eine Lösung zu finden. – Barker
@ CarlesMitjans danke für den Vorschlag; Ich habe es versucht, aber das gleiche Ergebnis. – user451151