I've got an problem. This is my instructions for R:

myfiles <- list.files("D:/dolnyslask/2011/after", pattern=".csv")
for (j in 1:length(myfiles)) {
thisfile <- read.csv(myfiles[j], header = T, sep=";", na.string="NA", comment.char="")
for (i in thisfile) {
x = sd(i, na.rm=T)
y = length (na.omit(i))
if (y == 0) {
cat(file=myfiles[j], append=F, (paste("-","\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, paste(length(na.omit(i)), "\n"))
}}}}}}}}}}}
} else if (x == 0) {
cat(file=myfiles[j], append=F, paste(format(min(i, na.rm=T), digits=5),"\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(max(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(median(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(sd(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T) - mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T) - mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format((mean(i, na.rm=T) - mean(i, na.rm=T))/median(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format((mean(i, na.rm=T) - mean(i, na.rm=T))/median(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(length(na.omit(i)), "\n"))
}}}}}}}}}}}
} else {
cat(file=myfiles[j], append=F, paste(format(min(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(max(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(median(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(sd(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(t.test(na.omit(i), conf.level=0.90)$conf.int, digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(t.test(na.omit(i), conf.level=0.90)$conf.int - mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format((t.test(na.omit(i), conf.level=0.90)$conf.int - mean(i, na.rm=T))/median(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(length(na.omit(i)), "\n"))
}}}}}}}}
}
}
}

I'm working of csv files (about 600) (from different years), which one of them looks like this:

1   NA    NA    NA    NA    NA    NA  4.0    NA    NA  10.0    NA    NA     NA
2   NA    NA    NA    NA    NA    NA 12.1    NA    NA   8.5    NA    NA     NA
3   NA    NA    NA    NA    NA    NA 14.8    NA    NA   6.0    NA    NA     NA
4   NA    NA    NA    NA    NA    NA 15.0    NA    NA   7.4    NA    NA     NA
5   NA    NA    NA    NA    NA    NA 16.0    NA    NA   8.0    NA    NA     NA
6   NA    NA    NA    NA    NA    NA 15.0    NA    NA   6.5    NA    NA     NA
7   NA    NA    NA    NA    NA    NA 17.8    NA    NA   5.8    NA    NA     NA
8   NA    NA    NA    NA    NA    NA 16.4    NA    NA   6.7    NA    NA     NA
9   NA    NA    NA    NA    NA    NA 11.7    NA    NA   7.7    NA    NA     NA
10  NA    NA    NA    NA    NA    NA  7.4    NA    NA  10.9    NA    NA     NA
11  NA    NA    NA    NA    NA    NA  3.8    NA    NA    NA    NA    NA     NA

but they are much more bigger.

When I use my loop on the example, it works. But when I use it for datas, on which I need to do it, R returns:

Error in if (x == 0) { : missing value where TRUE/FALSE needed

and stop loop.

I've got this problem everytime on one of files in turn... I checked averything, and I have no idea, what I could made wrong. Please help me. I use R only for a couple of weeks... but I checked every prompt, which I found on webs...

Maybe you can also tell me, how to write (in my case) my files with the same name but f.e. in different catalog?? Thank you so so much! Anna

有帮助吗?

解决方案

You get an error beacuase x is a missing value and you try to compare it to a numeric. The reproduce the error.

x <- NA
if(x==0)cat(x)
Error in if (x == 0) cat(x) : missing value where TRUE/FALSE needed

So this correct the problem:

if(x==0 || is.na(x))cat(x)

But here Some remarks about your very bad code:

  1. No need to use for here. Use lapply instead.
  2. What are you trying to do with you nested cat? amazing!

For example I would write something like this:

lapply(ff in myfiles){
  thisfile <- read.csv(ff, header = T, sep=";", 
                       na.string="NA", comment.char="")
  lapply(thisfile,function(col){
    x = sd(col, na.rm=T)
    y = length (na.omit(col))
    if (y == 0) {  ## do something here
    } else if (is.na(x) || x == 0) { ## do something here
      else { ## do something here

      }
  }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top