2016-06-17 9 views
2

Erstbenutzer hier! Ich lerne gerade R und habe, was ich hoffe, eine einfache Frage. Ich habe eine Reihe von Zahlen und Zahlen, und ich möchte sicherstellen, dass keine Zahl größer als eins ist. Ich versucheR: Benutzerdefinierte Funktion in apply()

myfct <- function(x) { 
    if (x > 1.0) x = 1.0 
    return(x) 
} 
apply(nums, 1, myfct) 

zu tun, aber dann bekomme ich diesen Fehler

Error in apply(nums, 1, myfct) : 
dim(X) must have a positive length 

Was mache ich falsch und gibt es einen besseren Weg, es zu tun? Vielen Dank!

+0

Willkommen bei SO nutzen! 'apply' kann nur für Matrizen und Arrays verwendet werden und es sieht so aus, als ob Ihre' nums' nur ein Vektor sind. Sieh dir 'sapply' und' lapply' an. Zweitens, für diese und zukünftige Fragen haben Sie eine viel bessere Antwortrate (größer als 0), wenn Sie zuerst über [minimum] (http://stackoverflow.com/help/mcve) und [reproduzierbare Fragen] lesen (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – r2evans

+0

Es scheint, dass "nums" ein Vektor ist. So können Sie die 'myfct', dh' myfct (nums) 'mit Änderungen in' myfct' direkt anwenden, wie zB 'if' nach' ifelse' ändern – akrun

+5

pmin (x, 1) oder x [x> 1] <- 1 – Roland

Antwort

3

Wir replace

replace(nums, nums > 1, 1) 
+1

Das funktioniert wie ein Zauber. Ich würde es abstimmen, aber es scheint, ich habe nicht genug rep ... –

1

Versuchen Sie stattdessen:

nums[] <- pmin(nums, 1) 

pmax eine „parallelisiert“ maximun ist so alle Werte größer als 1 um 1 ersetzt werden kann, ohne den [] wenn nums war ein Atomvektor gearbeitet hat.

+0

Dies scheint das Gegenteil von dem zu tun, was ich will, in dem alle Werte unter 1 dann auf 1 gesetzt werden. Ich denke, die pmin-Lösung ist, was in diesem speziellen Fall funktionieren wird. Dieser Neuling schätzt die Hilfe unabhängig! –

+2

Ich schein immer das falsch zu verstehen. Verwende 'pmin'. –

Verwandte Themen