如何从R中的文件中读取逻辑数据

时间:2010-09-24 06:08:51

标签: r

我生成了一个文件,每行包含一个“TRUE”或“FALSE”的逻辑值。现在我想将文件中的逻辑数据读入R.但是,读入的数据是模式“字符”而不是逻辑值。我想知道如何从文件中读取数据作为逻辑值。

我的R代码是

cat(FALSE,"\n", file="1.txt", append=FALSE);
for (i in 2:5) cat(TRUE,"\n",file="1.txt", append=TRUE);
a=scan(file="1.txt", what="logical")

输出结果为:

> mode(a)
[1] "character"
> mode(a[1])
[1] "character"
> a[1]
[1] "FALSE"

我希望[1]成为逻辑值。

谢谢和问候!

2 个答案:

答案 0 :(得分:7)

啊,现在我明白了。您必须非常仔细地阅读?scan,以确保您所做的不是scan()what参数的要求。我第一次错过了这个,然后想知道为什么你的代码不起作用。这是关键部分:

what: the type of ‘what’ gives the type of data to be read.  The
      supported types are ‘logical’, ‘integer’, ‘numeric’,
      ‘complex’, ‘character’, ‘raw’ and ‘list’.

,关键词是类型。因此,您需要将正确类型的对象传递给参数what

在你的例子中:

> typeof("logical")
[1] "character"

因此scan()会读入"character"类型的对象。

解决方案只是使用what = TRUE,或者确实使用R认为符合逻辑的任何内容(请参阅对此答案的评论),而不是

> typeof(TRUE)
[1] "logical"
> ## or
> typeof(logical())
[1] "logical"

## So now read in with what = TRUE
> a <- scan(file="1.txt", what = TRUE)
Read 5 items
> class(a)
[1] "logical"
> typeof(a)
[1] "logical"

read.table()在如何告诉它要读取的数据方面更合乎逻辑。相应的调用将是:

> b <- read.table("1.txt", colClasses = "logical")[,]
> class(b)
[1] "logical"
> typeof(b)
[1] "logical"

HTH

答案 1 :(得分:3)

使用a=='TRUE'->a