Forum

Nome Utente:
Password:
Riconoscimi automaticamente
 Tutti i Forum
 MolecularLab
 Bioinformatica
 Problema ad usare la funzione if in R
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
I seguenti utenti stanno leggendo questo Forum Qui c'è:

Aggiungi Tag Aggiungi i tag

Quanto è utile/interessante questa discussione:

Autore Discussione  

Trilli34
Nuovo Arrivato



4 Messaggi

Inserito il - 12 luglio 2010 : 15:58:47  Mostra Profilo  Visita l'Homepage di Trilli34 Invia a Trilli34 un Messaggio Privato  Rispondi Quotando
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  Mostra Profilo  Visita l'Homepage di dallolio_gm  Clicca per vedere l'indirizzo MSN di dallolio_gm Invia a dallolio_gm un Messaggio Privato  Rispondi Quotando
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! :-)
Torna all'inizio della Pagina

Glubus
Utente Junior

pinolo



156 Messaggi

Inserito il - 13 luglio 2010 : 09:18:13  Mostra Profilo  Visita l'Homepage di Glubus Invia a Glubus un Messaggio Privato  Rispondi Quotando
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

Torna all'inizio della Pagina

dallolio_gm
Moderatore


Prov.: Bo!
Città: Barcelona/Bologna


2445 Messaggi

Inserito il - 13 luglio 2010 : 10:53:07  Mostra Profilo  Visita l'Homepage di dallolio_gm  Clicca per vedere l'indirizzo MSN di dallolio_gm Invia a dallolio_gm un Messaggio Privato  Rispondi Quotando
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! :-)
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 16 luglio 2010 : 18:05:43  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
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+!)
Torna all'inizio della Pagina
  Discussione  

Quanto è utile/interessante questa discussione:

 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
Vai a:
MolecularLab.it © 2003-18 MolecularLab.it Torna all'inizio della Pagina