Як створити порожній вектор R для додавання нових елементів


92

Я хочу використовувати 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

Потім за допомогою [] можна вставити значення.


Це найкраща відповідь, якщо довжина вектора буде відома з самого початку, оскільки вона буде найбільш ефективною пам’яттю
stevec

25

Ви можете створити порожній вектор так

vec <- numeric(0)

А потім додайте елементи за допомогою c ()

vec <- c(vec, 1:5)

Однак, як каже Ромунов, набагато краще попередньо розподілити вектор, а потім заповнити його (оскільки це дозволяє уникнути перерозподілу нової копії вашого вектора при кожному додаванні елементів)


Мені подобається ваше рішення з numeric (), але мій досвід змусив мене використовувати NA замість 0 (якщо ви використовуєте numeric (2), ви отримаєте 0 0). Але це моя особиста перевага.
Roman Luštrik

Велике дякую!! Але чи можна звільнити попередній після додавання одного нового елемента? чи слід просто використовувати rm ()?
ligwin

Існує ще одна проблема, що typeof (numeric (0)) дає "double", тоді як шукані елементи дають "integer", коли додається, виникає помилка, кажучи "Тип для нового значення не може бути різним", як конвертувати?
ligwin

при роботі в python ключовим словом є "as", крім того, python не має таких типів даних, тому я думаю, що "as.integer" не буде працювати?
ligwin

romunov - числовий (0) означає створити числовий вектор довжиною 0 (тобто без елементів), а не вектор довжиною 1 з цим елементом 0
Aaron Statham

6

Щоб створити порожній вектор, використовуйте:

vec <- c();

Зверніть увагу, я не роблю жодних припущень щодо типу вектора, який вам потрібен, наприклад числовий.

Після створення вектора ви можете додати до нього елементи наступним чином:

Наприклад, щоб додати числове значення 1:

vec <- c(vec, 1);

або, щоб додати значення рядка "a"

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.