структура data.frame fubar: структура говорит большинство символов, печать говорит только некоторые - PullRequest
2 голосов
/ 11 сентября 2011

Я использую sqldf для подмножества огромного файла. Следующая команда дает мне data.frame из 100 строк и 42 столбцов.

first <- read.csv.sql("first.txt", sep = " ", header = TRUE, row.names = FALSE,
        sql = "SELECT * FROM file WHERE n = '\"n63\"' AND ratio = 1 AND r_name = '\"r1\"' AND method = '\"nearest\"' AND variables = 10")

Структура объекта:

'data.frame':   100 obs. of  42 variables:
 $ test_before       : chr  "TRUE" "TRUE" "TRUE" "TRUE" ...
 $ test_after        : chr  "TRUE" "TRUE" "TRUE" "TRUE" ...
 $ meanPSmatchRATIO  : chr  "1.54845330373635" "1.16857102212364" "1.25330045961256" "1.8011651466717" ...
snipped intervening normally printed columns
 $ PSdiff_DIFF       : chr  "-0.0103938442562762" "-0.00935228868105753" "-0.00947571480267878" 
snipped intervening normally printed columns
 $ nUNMATCHt         : chr  "0" "0" "0" "0" ...
 $ caliper           : chr  "\"no\"" "\"no\"" "\"no\"" "\"no\"" ...
 $ method            : chr  "\"nearest\"" "\"nearest\"" "\"nearest\"" "\"nearest\"" ...
 $ r_name            : chr  "\"r1\"" "\"r1\"" "\"r1\"" "\"r1\"" ...
 $ ratio             : int  1 1 1 1 1 1 1 1 1 1 ...
 $ n                 : chr  "\"n63\"" "\"n63\"" "\"n63\"" "\"n63\"" ...
 $ variables         : int  10 10 10 10 10 10 10 10 10 10 ...

Теперь, исходя из этого, можно ожидать, что при печати data.frame все столбцы (кроме этих int будут символьными (заключены в "")). Но ты ошибаешься!

  test_before test_after meanPSmatchRATIO del-  nUNMATCHt caliper    method r_name ratio     n variables
1        TRUE       TRUE 1.54845330373635 eted          0    "no" "nearest"   "r1"     1 "n63"        10
2        TRUE       TRUE 1.16857102212364 ...           0    "no" "nearest"   "r1"     1 "n63"        10
3        TRUE       TRUE 1.25330045961256 ...           0    "no" "nearest"   "r1"     1 "n63"        10
4        TRUE       TRUE  1.8011651466717 ...t          0    "no" "nearest"   "r1"     1 "n63"        10

Обратите внимание, что только последние несколько столбцов являются "символами". Я немного растерялся в том, что происходит. Может кто-нибудь объяснить?

Ответы [ 2 ]

5 голосов
/ 11 сентября 2011

выглядит хорошо для меня.print.data.frame обычно не печатает кавычки для символьных столбцов, но последние несколько столбцов имеют встроенные кавычки, поэтому они отображаются"в кавычках" по умолчанию.

Data <- data.frame(x=1:5,y=as.character(1:5),
  z=letters[1:5], q=paste("\"",letters[1:5],"\"",sep=""))
print(Data)  # default print
#   x y z   q
# 1 1 1 a "a"
# 2 2 2 b "b"
# 3 3 3 c "c"
# 4 4 4 d "d"
# 5 5 5 e "e"
print(Data, quote=TRUE)  # show embedded quotes
#     x   y   z       q
# 1 "1" "1" "a" "\"a\""
# 2 "2" "2" "b" "\"b\""
# 3 "3" "3" "c" "\"c\""
# 4 "4" "4" "d" "\"d\""
# 5 "5" "5" "e" "\"e\""
2 голосов
/ 11 сентября 2011

Вы видите поведение по умолчанию метода print для объектов фрейма данных. См. ?print.data.frame, который имеет:

   quote: logical, indicating whether or not entries should be printed
          with surrounding quotes.

, поэтому, если вы хотите, чтобы напечатанный объект был заключен в кавычки, используйте quote = TRUE. E.g.:

> dat <- data.frame(X = c("A","B"), Y = c("1","2"), stringsAsFactors = FALSE)
> dat
  X Y
1 A 1
2 B 2
> dat[,1] ## not using the data frame print method...
[1] "A" "B"
> print(dat, quote = TRUE)
    X   Y
1 "A" "1"
2 "B" "2"

Редактировать: относительно комментария Романа, в столбцах, напечатанных с кавычками, содержатся вложенные кавычки в данных. Например, первый элемент caliper - это "\"no\"", поэтому печатаются вложенные кавычки, что полностью соответствует поведению по умолчанию print.data.frame().

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