我生成了一个文件,每行包含一个“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]成为逻辑值。
谢谢和问候!
答案 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
。