Quanto è utile/interessante questa discussione:
Autore |
Discussione |
|
Trilli34
Nuovo Arrivato
4 Messaggi |
Inserito il - 12 luglio 2010 : 15:58:47
|
Salve, ho un esercizio che mi chiede di costruire una funzione quadratica che prende in input un vettore numerico e restituisce TRUE se esso è quadratico, cioè è tale che ogni valore del vettore sia uguale al quadrato del successivo. Questa è la funzione che ho costruito:
quadratica<-function(v){
p<-FALSE
for(i in 1:length(v)){
if(v[i]==v[i+1]*v[i+1]){
p<-TRUE
}
}
return(p)
}
ma se provo ad usarla mi dice "valore mancante dove è richiesto TRUE/FALSE" e non riesco a capire dove ho sbagliato...qualcuno mi vuole aiutare? Grazie
|
|
|
dallolio_gm
Moderatore
Prov.: Bo!
Città: Barcelona/Bologna
2445 Messaggi |
Inserito il - 12 luglio 2010 : 17:07:37
|
Ci sono alcuni errori di fondo nel tuo programma.
prendiamo per esempio il vettore v = c(2, 4, 8, 64)
per sapere se questo vettore è quadratico: - inizio un loop nel quale analizzo tutti gli elementi del vettore, uno alla volta, partendo dal secondo visto che il primo non potrebbe essere confrontato con nessun altro - per ogni elemento, lo comparo con il quadrato dell'elemento precedente. peró tu nel tuo codice hai messo v[i] == v[i+1]^2, quindi lo stai confrontando con l'elemento successivo. Dovrebbe essere i-1. - una volta aggiustato il problema del contatore a i-1, prova ad applicare la funzione con il vettore v2 = c(2, 4, 5), in cui i primi due elementi rispettano la condizione quadratica, ma il terzo no. Dovresti ristrutturare il loop e fare uso della istruzione break. |
Il mio blog di bioinformatics (inglese): BioinfoBlog Sono un po' lento a rispondere, posso tardare anche qualche giorno... ma abbiate fede! :-) |
|
|
Glubus
Utente Junior
156 Messaggi |
Inserito il - 13 luglio 2010 : 09:18:13
|
prima di usare un loop in R(a meno che non ti sia specificamente richiesto nell'esercizio) considera sempre le possibili alternative, il che vuol dire in genere i vantaggi della vettorizzazione.
nel tuo caso potresti ad esempio fare
falsa <- c(2, 4, 8, 64)#non è una serie quadratica vera<-c(2, 4, 16, 256)#è una serie quadratica is.quad<-function(x) { n<-length(x) all(x[-n]^2== x[-1]) } is.quad(vera) is.quad(falsa)
guarda anche gli operatori logici all e any.
Stefano
Citazione: Messaggio inserito da Trilli34
Salve, ho un esercizio che mi chiede di costruire una funzione quadratica che prende in input un vettore numerico e restituisce TRUE se esso è quadratico, cioè è tale che ogni valore del vettore sia uguale al quadrato del successivo. Questa è la funzione che ho costruito:
quadratica<-function(v){
p<-FALSE
for(i in 1:length(v)){
if(v[i]==v[i+1]*v[i+1]){
p<-TRUE
}
}
return(p)
}
ma se provo ad usarla mi dice "valore mancante dove è richiesto TRUE/FALSE" e non riesco a capire dove ho sbagliato...qualcuno mi vuole aiutare? Grazie
|
|
|
dallolio_gm
Moderatore
Prov.: Bo!
Città: Barcelona/Bologna
2445 Messaggi |
Inserito il - 13 luglio 2010 : 10:53:07
|
Citazione:
falsa <- c(2, 4, 8, 64)#non è una serie quadratica
vera<-c(2, 4, 16, 256)#è una serie quadratica
is.quad<-function(x) {
n<-length(x)
all(x[-n]^2== x[-1])
}
is.quad(vera)
is.quad(falsa)
Bella soluzione, anche se credo che si tratti solo di un esercizio sui loop, per imparare i fondamenti della programmazione. |
Il mio blog di bioinformatics (inglese): BioinfoBlog Sono un po' lento a rispondere, posso tardare anche qualche giorno... ma abbiate fede! :-) |
|
|
chick80
Moderatore
Città: Edinburgh
11491 Messaggi |
Inserito il - 16 luglio 2010 : 18:05:43
|
Ad ogni modo l'errore nella tua soluzione è dovuto al fatto che usi
i in 1:length(v)
quando dovresti usare
i in 1:(length(v)-1)
Altrimenti avrai un out-of-bounds error. |
Sei un nuovo arrivato? Leggi il regolamento del forum e presentati qui
My photo portfolio (now on G+!) |
|
|
|
Discussione |
|
|
|
Quanto è utile/interessante questa discussione:
MolecularLab.it |
© 2003-18 MolecularLab.it |
|
|
|