Мы также можем использовать dplyr
.
Во-первых, некоторые данные:
df <- data.frame(x = rep(1:6, rep(c(1, 2, 3), 2)), year = 1993:2004, month = c(1, 1:11))
Теперь число:
library(dplyr)
count(df, year, month)
#piping
df %>% count(year, month)
Мы также можем используйте немного более длинную версию с трубкой и функцию n()
:
df %>%
group_by(year, month) %>%
summarise(number = n())
или функцию `tally:
df %>%
group_by(year, month) %>%
tally()
puts
является синонимом $stdout.puts
. $ stdout - это класс IO
, поэтому посмотрите на документацию для IO.puts :
Записывает данные объекты в ios, как при печати IO #. Записывает разделитель записей (как правило, новую строку) после тех, которые еще не заканчиваются последовательностью новой строки. Если вызывается с аргументом массива, записывает каждый элемент в новую строку.
blockquote>Это означает, что метод
puts
предназначен для записи нескольких строк вывода. Таким образом, он пытается вызвать методto_ary
для объекта и еслиto_ary
определен, затем печатает каждый элемент возвращенногоArray
в новой строке, иначеputs
вызывает методto_s
.
to_ary
внутреннее использование в документации Ruby действительно недостаточно хорошо документировано (Matz указывает на это в книге языка программирования Ruby ).Методы
p
, с другой стороны, не вызываютto_ary
, толькоto_s
.Sidenote : Интересно, что
to_ary
должен возвращать реальныйArray
, а не объект, определяющий методeach
или что-то еще:class Test def to_ary 10.downto(1) end end puts Test.new #TypeError: can't convert Test to Array (Test#to_ary gives Enumerator) # from (irb):28:in `puts' # from (irb):28:in `puts' # from (irb):28