0

我有一个问题。这是我对 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"))
}}}}}}}}
}
}
}

我正在处理 csv 文件(大约 600 个)(来自不同年份),其中一个看起来像这样:

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

但它们要大得多。

当我在示例中使用我的循环时,它可以工作。但是当我将它用于我需要做的数据时,R返回:

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

并停止循环。

我每次轮流在一个文件上都遇到这个问题......我检查了所有内容,但我不知道我会做错什么。请帮我。我只使用了几个星期的 R ......但我检查了我在网上找到的每一个提示......

也许您还可以告诉我,如何(在我的情况下)在不同目录中使用相同名称但 fe 编写我的文件?非常感谢你!安娜

4

1 回答 1

0

你得到一个错误,因为 x 是一个缺失值,你尝试将它与一个数字进行比较。重现错误。

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

所以这纠正了问题:

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

但是这里有一些关于你非常糟糕的代码的评论:

  1. 不需要在for这里使用。改为使用lapply
  2. 你想对你的嵌套猫做什么?惊人!

例如我会写这样的东西:

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

      }
  }
于 2013-10-21T17:17:41.367 回答