#r #vector
#r #вектор
Вопрос:
Я хотел бы создать вектор, числовой вектор, который должен быть конкретным в R Studio. Я познакомился с этими двумя, читая некоторые вопросы о R. Я совершенно не понимаю разницы между ними. Что мне следует использовать или что лучше?
mydata <- c(1,2,3,4,5)
и
mydata <- as.vector(c(1,2,3,4,5))
Комментарии:
1.
?as.vector
Для получения дополнительной информации попробуйте ввести в консоль. Это больше для принудительной передачи данных из другого типа данных в вектор.is.vector(c(1,2,3,4,5))
возвращает TRUE, поэтому нет необходимости включатьas.vector
Ответ №1:
Нет необходимости вызывать as.vector
, as c()
создаст вектор с заданными записями. as.vector(c(1,2,3))
попытался бы принудить вектор к вектору и ничего не сделал бы в этом случае.
Вы можете видеть, что оба имеют одинаковый тип с str()
, например
> str(c(1,2,3))
num [1:3] 1 2 3
> str(as.vector(c(1,2,3)))
num [1:3] 1 2 3
Оба будут вычисляться в числовой вектор.
Возможно, руководство сможет объяснить больше. Вы можете просмотреть текст справки для (большинства) функций, добавив a ?
к имени функции.
?c
Это универсальная функция, которая объединяет свои аргументы.
Метод по умолчанию объединяет свои аргументы для формирования вектора. Все аргументы приводятся к общему типу, который является типом возвращаемого значения, и все атрибуты, кроме имен, удаляются.
Тип вектора будет зависеть от вводимых вами данных. Если вы предоставляете c()
числовые значения, это будет числовой вектор, и то же самое для строк. Обратите внимание, что смешивание типов в векторах может иметь нежелательные последствия, поскольку вектор может иметь только один тип.
?as.vector
as.vector , универсальный, пытается принудительно перевести свой аргумент в вектор
режима mode (по умолчанию используется принудительное переключение в тот векторный режим, который наиболее
удобен): если результат является атомарным, все атрибуты удаляются.
Обратите внимание, что я написал «в этом случае» для as.vector(c(1,2,3))
. Если бы у вас был именованный вектор, вызов as.vector()
удалил бы имена, например
> vec = c("abc" = 2, "def" = 3)
> vec
abc def
2 3
> as.vector(vec)
[1] 2 3
Обратите внимание, что имена удалены.
Ответ №2:
Проверьте результат с dput
помощью, если сомневаетесь:
dput( c(1,2,3,4,5) )
dput( as.vector(c(1,2,3,4,5) ))
Это дает вам R-код, необходимый для их воссоздания. Они должны получиться идентичными.
as.vector превращает свой первый аргумент в вектор и предлагает дополнительные функциональные возможности с mode
помощью аргумента. c
объединяет несколько аргументов, приводя их к общему типу. В руководствах есть примеры и дополнительная документация ?c
и ?as.vector
Комментарии:
1. Спасибо. Я пробовал? функция для обоих, но я не могу четко понять, что она говорит. Но мне это как-то понятно.
Ответ №3:
Основное различие заключается в атрибуте names
.
На страницах справки help('as.vector')
мой акцент:
as.vector , универсальный, пытается принудительно перевести свой аргумент в вектор режима mode (по умолчанию используется принудительное переключение в тот векторный режим, который наиболее удобен): если результат является атомарным, все атрибуты удаляются.
и help('c')
, мой акцент:
Метод по умолчанию объединяет свои аргументы для формирования вектора. Все аргументы приводятся к общему типу, который является типом возвращаемого значения, и все атрибуты, кроме имен, удаляются.
mydata <- setNames(c(1,2,3,4,5), letters[1:5])
c(mydata)
#a b c d e
#1 2 3 4 5
as.vector(mydata)
#[1] 1 2 3 4 5