I have one column that represents correct response versus error (correct is coded as 1 and error is coded as 0). Nowhere else in the dataset are there values of 0. The vector is treated as an integer. ________________________________ From: Michael Dewey <lists at dewey.myzen.co.uk> Sent: Monday, April 20, 2020 7:35 PM To: Helen Sawaya <helensawaya at hotmail.com>; Rui Barradas <ruipbarradas at sapo.pt>; r-help at R-project.org <r-help at R-project.org> Subject: Re: [R] NA command in a 'for' loop Just a thought Helen but is x being treated as a real and what you think are zero and are printed as zero are in fact some very small number? If so you need to alter your test appropriately. Michael On 20/04/2020 17:25, Helen Sawaya wrote:> Thank you for your reply. > > I tried d[] <- lapply(d, function(x) {is.na(x) <- x == 0; x}) > ?but I am still getting zeros instead of NAs in my output.. > > I wonder if the problem is that some of my data files don't have any zeros (participants made no errors).. > ________________________________ > From: Rui Barradas <ruipbarradas at sapo.pt> > Sent: Monday, April 20, 2020 9:05 AM > To: Helen Sawaya <helensawaya at hotmail.com>; r-help at R-project.org <r-help at R-project.org> > Subject: Re: [R] NA command in a 'for' loop > > Hello, > > Instead of > > d[d == 0] <- NA > > try > > d[] <- lapply(d, function(x) {is.na(x) <- x == 0; x}) > > > Also, in the first for loop > > paste(i, sep = "") > > does nothing, it's the same as i. > And the same for > > (d2$V4 == 1) == TRUE > > Since (d2$V4 == 1) already is FALSE/TRUE there is no need for > > (.) == TRUE > > > Hope this helps, > > Rui Barradas > > > > ?s 20:52 de 19/04/20, Helen Sawaya escreveu: >> Dear R experts, >> >> I am using a 'for' loop to apply commands to multiple datasets (each file is one participant). The only one not working is the command that identifies zeros in my datasets and changes them to NAs. But when I look at the output, zeros ("0") are still present. Surprisingly, the functions work fine when I apply them to a single dataset (outside the loop). I've tried: >> >> all.files <- list.files(".") >> txt.files <- grep("threat.txt",all.files,value=T) >> >> for(i in txt.files){ >> d <- read.table(paste(i,sep=""),header=F) >> d[d==0] <- NA #replace zeros with NA >> write.table(d, paste0(i,".tlbs.txt"), quote=FALSE, row.names=TRUE)} >> d<-d[ ,-c(10,11)] >> d2<-d[complete.cases(d), ] >> d2$V4<-as.numeric(d2$V4) >> congruent <- (d2$V4 == 1) == TRUE >> x <- get_tlbs(d2$V14, congruent, prior_weights = NULL, method = "weighted", fill_gaps = FALSE) >> write.table(x, paste0(i,".tlbs.txt"), quote=FALSE, row.names=TRUE)} >> >> I've also tried: >> >> for(i in txt.files){ >> d <- read.table(paste(i,sep=""),header=F) >> if (0 %in% d) >> {replace_with_na(d,replace = list(x = 0))} # replace zeros with NA >> d<-d[ ,-c(10,11)] >> d2<-d[complete.cases(d), ] >> d2$V4<-as.numeric(d2$V4) >> congruent <- (d2$V4 == 1) == TRUE >> x <- get_tlbs(d2$V14, congruent, prior_weights = NULL, method = "weighted", fill_gaps = FALSE) >> write.table(x, paste0(i,".summaryoutput.txt"), quote=FALSE, row.names=TRUE)} >> >> Thank you for your help. >> Sincerely >> Helen >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > >-- Michael http://www.dewey.myzen.co.uk/home.html [[alternative HTML version deleted]]
Hello, I believe the only way we have to see what is happening is for you to post the output of dput(head(d, 20)) # or 30 or, with d2 a subset of d that includes zeros, dput(head(d2, 20)) Hope this helps, Rui Barradas ?s 17:48 de 20/04/20, Helen Sawaya escreveu:> I have one column that represents correct response versus error (correct > is coded as 1 and error is coded as 0). Nowhere else in the dataset are > there values of 0. The vector is treated as an integer. > ------------------------------------------------------------------------ > *From:* Michael Dewey <lists at dewey.myzen.co.uk> > *Sent:* Monday, April 20, 2020 7:35 PM > *To:* Helen Sawaya <helensawaya at hotmail.com>; Rui Barradas > <ruipbarradas at sapo.pt>; r-help at R-project.org <r-help at R-project.org> > *Subject:* Re: [R] NA command in a 'for' loop > Just a thought Helen but is x being treated as a real and what you think > are zero and are printed as zero are in fact some very small number? If > so you need to alter your test appropriately. > > Michael > > On 20/04/2020 17:25, Helen Sawaya wrote: >> Thank you for your reply. >> >> I tried d[] <- lapply(d, function(x) {is.na(x) <- x == 0; x}) >> ?but I am still getting zeros instead of NAs in my output.. >> >> I wonder if the problem is that some of my data files don't have any zeros (participants made no errors).. >> ________________________________ >> From: Rui Barradas <ruipbarradas at sapo.pt> >> Sent: Monday, April 20, 2020 9:05 AM >> To: Helen Sawaya <helensawaya at hotmail.com>; r-help at R-project.org <r-help at R-project.org> >> Subject: Re: [R] NA command in a 'for' loop >> >> Hello, >> >> Instead of >> >> d[d == 0] <- NA >> >> try >> >> d[] <- lapply(d, function(x) {is.na(x) <- x == 0; x}) >> >> >> Also, in the first for loop >> >> paste(i, sep = "") >> >> does nothing, it's the same as i. >> And the same for >> >> (d2$V4 == 1) == TRUE >> >> Since (d2$V4 == 1)? already is FALSE/TRUE there is no need for >> >> (.) == TRUE >> >> >> Hope this helps, >> >> Rui Barradas >> >> >> >> ?s 20:52 de 19/04/20, Helen Sawaya escreveu: >>> Dear R experts, >>> >>> I am using a 'for' loop to apply commands to multiple datasets (each file is one participant). The only one not working is the command that identifies zeros in my datasets and changes them to NAs. But when I look at the output, zeros ("0") are still present. Surprisingly, the functions work fine when I apply them to a single > dataset (outside the loop). I've tried: >>> >>> all.files <- list.files(".") >>> txt.files <- grep("threat.txt",all.files,value=T) >>> >>> for(i in txt.files){ >>>???? d <- read.table(paste(i,sep=""),header=F) >>>???? d[d==0] <- NA #replace zeros with NA >>>???? write.table(d, paste0(i,".tlbs.txt"), quote=FALSE, row.names=TRUE)} >>>???? d<-d[ ,-c(10,11)] >>>???? d2<-d[complete.cases(d), ] >>>???? d2$V4<-as.numeric(d2$V4) >>>???? congruent <- (d2$V4 == 1) == TRUE >>>???? x <- get_tlbs(d2$V14, congruent, prior_weights = NULL, method = "weighted", fill_gaps = FALSE) >>>???? write.table(x, paste0(i,".tlbs.txt"), quote=FALSE, row.names=TRUE)} >>> >>> I've also tried: >>> >>> for(i in txt.files){ >>>???? d <- read.table(paste(i,sep=""),header=F) >>>???? if (0 %in% d) >>>???? {replace_with_na(d,replace = list(x = 0))} # replace zeros with NA >>>???? d<-d[ ,-c(10,11)] >>>???? d2<-d[complete.cases(d), ] >>>???? d2$V4<-as.numeric(d2$V4) >>>???? congruent <- (d2$V4 == 1) == TRUE >>>???? x <- get_tlbs(d2$V14, congruent, prior_weights = NULL, method = "weighted", fill_gaps = FALSE) >>>???? write.table(x, paste0(i,".summaryoutput.txt"), quote=FALSE, row.names=TRUE)} >>> >>> Thank you for your help. >>> Sincerely >>> Helen >>> >>>???????? [[alternative HTML version deleted]] >>> >>> ______________________________________________ >>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >>> >> >>??????? [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> >> > > -- > Michael > http://www.dewey.myzen.co.uk/home.html
Hi Helen, Your problem may lie in using row.names=TRUE. I was puzzled when an extra column kept popping up in the output files. For reading in and replacing zeros with NAs, this seems to work: for(mockdata in 1:3) { mdf<-data.frame(sample(2:20,10),sample(2:20,10),sample(0:1,10,TRUE)) write.table(mdf,file=paste0("threat",mockdata,".txt"),quote=FALSE, row.names=FALSE,col.names=FALSE) } txt.files<-list.files(".",pattern="threat[1-3]") for(tf in txt.files) { d<-read.table(tf) d[,3][d[,3]==0]<-NA write.table(d,sub("[.]",".tbls.",tf),quote=FALSE,row.names=FALSE) } Jim On Tue, Apr 21, 2020 at 7:57 AM Rui Barradas <ruipbarradas at sapo.pt> wrote:> > Hello, > > I believe the only way we have to see what is happening is for you to > post the output of > > > dput(head(d, 20)) # or 30 > > > or, with d2 a subset of d that includes zeros, > > > dput(head(d2, 20)) > > > Hope this helps, > > Rui Barradas > > ?s 17:48 de 20/04/20, Helen Sawaya escreveu: > > I have one column that represents correct response versus error (correct > > is coded as 1 and error is coded as 0). Nowhere else in the dataset are > > there values of 0. The vector is treated as an integer. > > ------------------------------------------------------------------------ > > *From:* Michael Dewey <lists at dewey.myzen.co.uk> > > *Sent:* Monday, April 20, 2020 7:35 PM > > *To:* Helen Sawaya <helensawaya at hotmail.com>; Rui Barradas > > <ruipbarradas at sapo.pt>; r-help at R-project.org <r-help at R-project.org> > > *Subject:* Re: [R] NA command in a 'for' loop > > Just a thought Helen but is x being treated as a real and what you think > > are zero and are printed as zero are in fact some very small number? If > > so you need to alter your test appropriately. > > > > Michael > > > > On 20/04/2020 17:25, Helen Sawaya wrote: > >> Thank you for your reply. > >> > >> I tried d[] <- lapply(d, function(x) {is.na(x) <- x == 0; x}) > >> but I am still getting zeros instead of NAs in my output.. > >> > >> I wonder if the problem is that some of my data files don't have any zeros (participants made no errors).. > >> ________________________________ > >> From: Rui Barradas <ruipbarradas at sapo.pt> > >> Sent: Monday, April 20, 2020 9:05 AM > >> To: Helen Sawaya <helensawaya at hotmail.com>; r-help at R-project.org <r-help at R-project.org> > >> Subject: Re: [R] NA command in a 'for' loop > >> > >> Hello, > >> > >> Instead of > >> > >> d[d == 0] <- NA > >> > >> try > >> > >> d[] <- lapply(d, function(x) {is.na(x) <- x == 0; x}) > >> > >> > >> Also, in the first for loop > >> > >> paste(i, sep = "") > >> > >> does nothing, it's the same as i. > >> And the same for > >> > >> (d2$V4 == 1) == TRUE > >> > >> Since (d2$V4 == 1) already is FALSE/TRUE there is no need for > >> > >> (.) == TRUE > >> > >> > >> Hope this helps, > >> > >> Rui Barradas > >> > >> > >> > >> ?s 20:52 de 19/04/20, Helen Sawaya escreveu: > >>> Dear R experts, > >>> > >>> I am using a 'for' loop to apply commands to multiple datasets (each file is one participant). The only one not working is the command that identifies zeros in my datasets and changes them to NAs. But when I look at the output, zeros ("0") are still present. Surprisingly, the functions work fine when I apply them to a single > > dataset (outside the loop). I've tried: > >>> > >>> all.files <- list.files(".") > >>> txt.files <- grep("threat.txt",all.files,value=T) > >>> > >>> for(i in txt.files){ > >>> d <- read.table(paste(i,sep=""),header=F) > >>> d[d==0] <- NA #replace zeros with NA > >>> write.table(d, paste0(i,".tlbs.txt"), quote=FALSE, row.names=TRUE)} > >>> d<-d[ ,-c(10,11)] > >>> d2<-d[complete.cases(d), ] > >>> d2$V4<-as.numeric(d2$V4) > >>> congruent <- (d2$V4 == 1) == TRUE > >>> x <- get_tlbs(d2$V14, congruent, prior_weights = NULL, method = "weighted", fill_gaps = FALSE) > >>> write.table(x, paste0(i,".tlbs.txt"), quote=FALSE, row.names=TRUE)} > >>> > >>> I've also tried: > >>> > >>> for(i in txt.files){ > >>> d <- read.table(paste(i,sep=""),header=F) > >>> if (0 %in% d) > >>> {replace_with_na(d,replace = list(x = 0))} # replace zeros with NA > >>> d<-d[ ,-c(10,11)] > >>> d2<-d[complete.cases(d), ] > >>> d2$V4<-as.numeric(d2$V4) > >>> congruent <- (d2$V4 == 1) == TRUE > >>> x <- get_tlbs(d2$V14, congruent, prior_weights = NULL, method = "weighted", fill_gaps = FALSE) > >>> write.table(x, paste0(i,".summaryoutput.txt"), quote=FALSE, row.names=TRUE)} > >>> > >>> Thank you for your help. > >>> Sincerely > >>> Helen > >>> > >>> [[alternative HTML version deleted]] > >>> > >>> ______________________________________________ > >>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > >>> https://stat.ethz.ch/mailman/listinfo/r-help > >>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > >>> and provide commented, minimal, self-contained, reproducible code. > >>> > >> > >> [[alternative HTML version deleted]] > >> > >> ______________________________________________ > >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > >> https://stat.ethz.ch/mailman/listinfo/r-help > >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > >> and provide commented, minimal, self-contained, reproducible code. > >> > >> > > > > -- > > Michael > > http://www.dewey.myzen.co.uk/home.html > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.