Как создать пустой вектор 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.