Assegnazione vuota in R

valeriaaa11
Buon giorno mi serve un aiuto sul seguente codice
x<-read.csv("C:/modificato.csv" , sep=",", header=T)

xmodappoggio<-xmod

link<- sapply(strsplit(as.character(xmod$link.finale),"/"),"[",1)
xmod<-cbind(xmod, link)
righe<-nrow(xmod)

for(i in 1:righe){
if(xmod$link[i]=="http://www.facebook.com")
xmod$link[i]<-xmodappoggio$link.finale[i]
}



Il compilatore non segnale nessun errore, però l'ultima riga non ha effetto!
In pratica io ho una matrice(xmodappoggio) che contiene, nella colonna link.finale, un elenco di siti internet quindi:
http://www.facebook.com/ciao.jpg
...
http://www.google.it/casa.txt

Mentre in xmod ho l'elenco dei siti internet, senza / poichè ho usato split quindi verrebbe:
http://www.facebook.com
...
http://www.google.it

Voglio però che in xmod se è presente il sito http://www.facebook.com mi compaia tutto il percorso del sito cioè anche il /ciao.jpg( e quindi la cella presente nella colonna link.finale della matrice di xmodappoggio).
Questo però non funziona perchè quel campo dopo che eseguo le righe, mi viene vuoto. Mentre tutti gli altri siti(che non verificano la condizione cioè che non sono facebook) hanno il valore troncato..cosa può essere l'errore?

Risposte
valeriaaa11
Ho modificato il codice che avevo scritto nel messaggio iniziale, lasciando solo quello riguardante questo problema...se avete idee sono gradite :smt023

valeriaaa11
Nell'esempio che ti ho fatto, effettivamente, ho sbagliato ad inserire .it perchè sarebbe stato .com.
La condizione del ciclo me la verifica perchè mi sostituisce SOLO i facebook.com con uno spazio vuoto. Non capisco come mai non li sostituisce con i link completi( che esistono nella matrice di appoggio xmodappoggio). E' possibile che possa centrare con il fatto che sono FACTOR e non caratteri?In tal caso come si modificherebbe il codice?

valeriaaa11
Ecco il codice completo:
 
x<-read.csv("C:/modificato.csv" , sep=",", header=T)
x<-x[-1,]
ora<-substr(x$data, start = 12, stop= 13)
xmod<-cbind(x, ora)
xmod <- xmod[,-4]

xmod<-subset(xmod, posizione.tipoBanner!="" & categoria!="Autopubblicità" & categoria!="Auto-pubblicità" & categoria!="" & categoria!="Extrasettore")

xmod<-xmod[order(xmod[,4]),]

xmodappoggio<-xmod

link<- sapply(strsplit(as.character(xmod$link.finale),"/"),"[",1)
xmod<-cbind(xmod, link)
xmod<-xmod[,-4]
righe<-nrow(xmod)

for(i in 1:righe){
if(xmod$link[i]=="facebook.com")
xmod$link[i]<-xmodappoggio$link.finale[i]
}


valeriaaa11
Grazie mille Sergio per la spiegazione!
Ho verificato che il codice funziona correttamente, però vorrei farti queste altre domande:

1)qual è l'utilità del factor? In quali casi devo reimpostare l'impostazione StringAsFactors come TRUE?
2)Perchè nell'ultima riga mi hai fatto inserire options(default.options) ? Ho provato il codice senza quella riga e andava lo stesso..
3)sarebbe stato equivalente mettere nel mio codice x<-read.csv("C:/modificato.csv" , sep=",", header=T, stringsAsFactors = FALSE) senza le "tue" 2 righe?

Ripeto che la tua soluzione funziona alla perfezione, queste son domande solo per non rincappare nello stesso errore in futuro :-D

ps: nella mia riga di codice link<- sapply(strsplit(as.character(xmod$link.finale),"/"),"[",1) l'unica cosa che non ho capito è perchè inserire "[" (avevo trovato un comando simile su un altro sito) , chiedo troppo? :D

valeriaaa11
Grazie Sergio, ho riflettutto molto sulla tua risposta ed è davvero da manuale!Sei molto chiaro soprattutto quando mi hai spiegato perchè non posso usare "x<-read.csv("C:/modificato.csv" , sep=",", header=T, stringsAsFactors = FALSE)"

In questa riga
 link<- sapply(strsplit(as.character(xmod$link.finale),"/"),"[",1) 

ho capito la spiegazione della funzione sapply e di cosa si occupa. Ti chiedevo però COME si capisce che [ equivale ad estrai. Questa riga l'ho copiata da un sito internet ma non ho trovato, usando l'help di R, l' associazione [ --> estrai.

Ultima domanda sulla tua spiegazione:
La prima riga di codice che dovevo inserire era
default.options <- options(stringsAsFactors = FALSE)
mio codice...E l'ultima riga
options(default.options)

Non riesco a spiegarmi come R capisce che, nella prima riga di codice, le impostazioni siano FALSE con il solo fatto di creare l'oggetto default.option e che utilità ha l'ultima riga..Cioè io vedendo l'ultima riga capisco che mi imposta le opzioni di stringAsFactors = False (poichè passa come parametro l'oggetto default.options che ho dichiarato nella prima riga). Ma non dovrebbe fare il contrario cioè reimpostarmele a TRUE(valore di defualt)?

PS:Ho ulteriori 2 domande sulla prosecuzione del codice, nel senso che mi viene già quello che voglio fare ma sono sicuro che esista un codice "migliore" e maggiormente leggibile...Posso farti dare un occhiata o chiedo troppo?Dimmi sinceramente :-D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.