Что такое второй столбец отчета `str` в R и что означает` atomic 'в этом столбце? - PullRequest
7 голосов
/ 27 апреля 2011

Использование str(survey_OM) в моем фрейме данных означает, что все мои числовые данные atomic.Если я использую class(survey_OM$perc.OM), он возвращает numeric.

Я всегда думал, что второй столбец str показывает класс данных, но это не так просто ... поэтому мои вопросы:

  1. Что такоевторой столбец отчета str?
  2. Что такое atomic и чем он отличается от numeric?
  3. Почему в этом случае данные отображаются как atomic, а не какnum или int?

спасибо.
dput(head(survey_OM, 20)) обеспечивает:

> dput(head(survey_OM, 20))
  structure(list(lake = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 
  3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("E-2", 
  "E-4", "E pond", "EX 1", "GTH 110", "GTH 112", "GTH 114", "GTH 156", 
  "GTH 91", "GTH 98", "N-1", "NE-10", "NE-11", "NE-3", "NE-8", 
  "NE-9", "NE-9b", "S-10", "S-11", "S-3", "S-6", "S-7"), class = "factor"), 
  date = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
  2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("2007/06/15", 
  "2007/06/18", "2007/06/19", "2007/06/20", "2007/06/21", "2007/06/27", 
  "2007/06/29", "2007/07/07", "2007/07/19", "2007/07/20", "2008/07/26", 
  "2008/07/30", "2008/08/04", "2008/08/06"), class = "factor"), 
  depth = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
  2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("E", 
  "epi", "H", "hypo"), class = "factor"), 
  depth.m = structure(c(6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L), .Label = c("", "10.9", "12.9", "1.5", "2", 
  "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "3", "3.1", 
  "3.5", "4", "4.2", "4.8", "4.9", "5", "5.1", "5.5", "6", 
  "6.5", "7", "7.2", "9.9", "not recorded"), class = "factor"), 
  rep = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", 
  "B", "C"), class = "factor"), 
  sed = c(0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L), 
  notes = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("", 
  "col on SE side", "lg snail shell", "not collected", "very hard sediments"
  ), class = "factor"), 
  dry.mass = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), 
  perc.OM = c(47.1300248455119, 47.4260808104607, 47.7349307375515, 46.4501104675465, 44.1513415737111, 43.5608499678045, 42.9921259842519, 42.2674677347574, 39.6643311064039, 
  39.0968130690949, 46.7768514928267, 46.9211608642763, 46.7877013177158, 
  47.0709930313588, 44.3241152581706, 43.7905468025952, 41.706074101281, 
  36.5061097383474, 37.4329041152142, 37.7757939038389)), .Names = c("lake", 
  "date", "depth", "depth.m", "rep", "sed", "notes", "dry.mass", 
  "perc.OM"), comment = c("working data frame of the sediment char from the 2007 sed    survey       created:", "Wed Apr 27 14:23:33 2011"), row.names = c(NA, 20L), class = "data.frame")

и полный вывод str(survey_OM):

> str(survey_OM)
'data.frame':   780 obs. of  9 variables:
 $ lake    : Factor w/ 22 levels "E-2","E-4","E pond",..: 3 3 3 3 3 3 3 3 3 3 ...
  ..- attr(*, "comment")= chr "names of the lakes"
 $ date    : Factor w/ 14 levels "2007/06/15","2007/06/18",..: 2 2 2 2 2 2 2 2 2 2 ...
  ..- attr(*, "comment")= chr "date that the cores were collected"
 $ depth   : Factor w/ 4 levels "E","epi","H",..: 2 2 2 2 2 2 2 2 2 2 ...
  ..- attr(*, "comment")= chr "relative depth ID; epi = shallowest corable Z, hypo =   deepest Z, S, M, D = shallow, med, deep"
 $ depth.m : Factor w/ 28 levels "","10.9","12.9",..: 6 6 6 6 6 6 6 6 6 6 ...
  ..- attr(*, "comment")= chr "depth that core was collected in m"
 $ rep     : Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 1 1 1 1 ...
  ..- attr(*, "comment")= chr "replicate ID for core"
 $ sed     : atomic  0 1 2 3 4 5 6 7 8 9 ...
  ..- attr(*, "comment")= chr "depth of sample from sed/water interface in cm"
 $ notes   : Factor w/ 5 levels "","col on SE side",..: 1 1 1 1 1 1 1 1 1 1 ...
  ..- attr(*, "comment")= chr "comments on sample"
 $ dry.mass: atomic  0 0 0 0 0 0 0 0 0 0 ...
  ..- attr(*, "comment")= chr "dry mass of the sediment at that sed Z in g/m^2"
 $ perc.OM : atomic  47.1 47.4 47.7 46.5 44.2 ...
  ..- attr(*, "comment")= chr "percent OM of the samp. based on LOI at 550d C"
 - attr(*, "comment")= chr  "working data frame of the sediment char from the 2007 sed survey created:" "Wed Apr 27 14:23:33 2011"

Ответы [ 3 ]

8 голосов
/ 28 апреля 2011

Глядя на utils:::str.default, мы видим, что получаем обычный вывод int, num и т. Д., Если следующее утверждение if верно:

if (     is.vector(object) 
     || (is.array(object) && is.atomic(object))
     ||  is.vector(object, mode = "language") 
     || is.vector(object, mode = "symbol")
   )

Мы получаемatomic если это утверждение ложно (и в противном случае оно было бы int, num и т. Д.).

Если посмотреть страницу справки для is.vector, мы увидим, что она возвращает true только в том случае,это вектор без атрибутов, кроме имен.Вот кадр данных, в котором b имеет дополнительный атрибут:

d <- data.frame(a=1:4, b=5:8)
attr(d$b, "tmp") <- "surprise!"

И вызов str для него дает atomic для b вместо int.

> str(d)
'data.frame':   4 obs. of  2 variables:
 $ a: int  1 2 3 4
 $ b: atomic  5 6 7 8
  ..- attr(*, "tmp")= chr "surprise!"

В ваших изменениях я вижу, что у вас есть дополнительные атрибуты для элементов вашего фрейма данных, и что вы получаете эти дополнительные строки и о ваших атрибутах, так что может показаться, что это объясняет это.

2 голосов
/ 28 апреля 2011

R делит типы данных на атомарные и рекурсивные.Вещи, которые большинство людей называют векторами, являются атомарными (как уже упоминалось несколькими людьми). Списки могут иметь произвольные уровни сложности, то есть списки внутри списков и возвращать FALSE из is.atomic ().Атомные векторы могут иметь атрибуты, не теряя свою «атомарность».

1 голос
/ 28 апреля 2011

Я полагаю, что ваши три вопроса сводятся к одному.

Второй столбец str() возвращает mode объекта, а не класса. Инструкция ?atomic перенаправляет на ?vector, где она заявляет: "Атомарные режимы" логические "," целые "," числовые "(синоним" double ")," сложные "," символ "и" сырые ""

Таким образом numeric является одним из режимов atomic.

mode относится к режиму хранения объекта. См. ?mode для получения более подробной информации.

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