Как создать пустой вектор R для добавления новых элементов


93

Я хочу использовать R в Python, как это предусмотрено модулем Rpy2. Я заметил, что в R есть очень удобные []операции, с помощью которых вы можете извлекать определенные столбцы или строки. Как я мог добиться такой функции с помощью скриптов Python?

Моя идея состоит в том, чтобы создать вектор R и добавить нужные элементы в этот вектор, чтобы конечный вектор был таким же, как и в R. Я создал a seq(), но кажется, что он имеет начальную цифру 1, поэтому конечный результат всегда будет начать с цифры 1, чего я не хочу. Итак, есть ли лучший способ сделать это?

Ответы:



56

Я заранее выделяю вектор с помощью

> (a <- rep(NA, 10))
 [1] NA NA NA NA NA NA NA NA NA NA

Затем вы можете использовать [] для вставки в него значений.


Это лучший ответ, если длина вектора известна с самого начала, так как он будет наиболее эффективным с точки
— зрения

25

Вы можете создать пустой вектор вот так

vec <- numeric(0)

А затем добавьте элементы с помощью c ()

vec <- c(vec, 1:5)

Однако, как говорит Ромунов, гораздо лучше предварительно выделить вектор, а затем заполнить его (так как это позволяет избежать перераспределения новой копии вашего вектора каждый раз, когда вы добавляете элементы)


Мне нравится ваше решение с numeric (), но мой опыт привел меня к использованию NA вместо 0 (если вы используете numeric (2), вы получите 0 0). Но это мое личное предпочтение.
— Роман Луштрик

Большое спасибо!! Но можно ли освободить предыдущий после добавления одного нового элемента? мне просто использовать rm ()?
— ligwin 05

Есть еще одна проблема, что typeof (numeric (0)) дает «double», тогда как желаемые элементы дают «integer», при добавлении возникла ошибка: «Тип нового значения не может быть другим», как преобразовать?
— ligwin 05

при работе в python "as" является ключевым словом, кроме того, в python нет таких типов данных, поэтому я думаю, что "as.integer" не сработает?
— ligwin 05

romunov - numeric (0) означает создание числового вектора с длиной 0 (то есть без элементов), а не с вектором длины 1 с этим элементом, равным 0
— Аарон Стэтхэм

7

Чтобы создать пустой вектор, используйте:

vec <- c();

Обратите внимание, я не делаю никаких предположений о типе вектора, который вам нужен, например числовой.

После создания вектора вы можете добавлять к нему элементы следующим образом:

Например, чтобы добавить числовое значение 1:

vec <- c(vec, 1);

или, чтобы добавить строковое значение "а"

vec <- c(vec, "a");

4
Вы действительно пробовали это? vec <- c()устанавливает vec равным NULL. Если вам нужен пустой вектор, вы должны использовать vec <- character()и vec <- numeric()т. Д.
— Мэтью Уайз,

5

Я также видел

x <- {}

Теперь вы можете объединить или привязать вектор любой размерности к x

rbind(x, 1:10)
cbind(x, 1:10)
c(x, 10)

2
Это в точности то же самое x <- NULL, что и, и не создает ничего, кроме ссылки в никуда.
— Джорис Мейс

3

Как указал Брани, вектор () является решением, например

newVector <- vector(mode = "numeric", length = 50)

вернет вектор с именем «newVector» с 50 «0» в качестве начальных значений. Также довольно часто просто добавляют новый скаляр к существующему вектору, чтобы получить расширенный вектор, например

aVector <- c(aVector, newScalar)


2

В rpy2 способ получить тот же оператор, что и "[" с R, - использовать ".rx". См. Документацию по извлечению с помощью rpy2

Для создания векторов, если вы хорошо разбираетесь в Python, проблем быть не должно. См. Документацию по созданию векторов


Я использовал для этой цели функцию в Python, что очень сложно, и я не уверен, насколько широко она может применяться. Теперь я думаю, что с этими операторами жизнь могла бы быть намного проще :)
— ligwin 07
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.