Как читать логические данные из файла в R - PullRequest
4 голосов
/ 24 сентября 2010

Я сгенерировал файл, который содержит логическое значение «ИСТИНА» или «ЛОЖЬ» в каждой строке. Теперь я хотел бы прочитать логические данные из файла в 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 ]

7 голосов
/ 24 сентября 2010

Ах, теперь я понял. Вы должны очень внимательно прочитать ?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"

НТН

3 голосов
/ 24 сентября 2010

Использование a=='TRUE'->a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...