Cách tạo vectơ R trống để thêm các mục mới


92

Tôi muốn sử dụng R trong Python, như được cung cấp bởi mô-đun Rpy2. Tôi nhận thấy rằng R có các []hoạt động rất thuận tiện mà bạn có thể trích xuất các cột hoặc dòng cụ thể. Làm thế nào tôi có thể đạt được một chức năng như vậy bằng các tập lệnh Python?

Ý tưởng của tôi là tạo một vectơ R và thêm các phần tử mong muốn đó vào vectơ này để vectơ cuối cùng giống với vectơ trong R. Tôi đã tạo a seq(), nhưng có vẻ như nó có chữ số đầu tiên là 1, vì vậy kết quả cuối cùng sẽ luôn bắt đầu với chữ số 1, đó không phải là những gì tôi muốn. Vì vậy, có một cách tốt hơn để làm điều này?

Câu trả lời:


95
vec <- vector()

Xem thêm trợ giúp về vector

?vector

56

Tôi phân bổ trước một vectơ với

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

Sau đó, bạn có thể sử dụng [] để chèn các giá trị vào đó.


Đây là câu trả lời tốt nhất nếu biết độ dài của vectơ ngay từ đầu, vì nó sẽ tiết kiệm bộ nhớ nhất
stevec

25

Bạn có thể tạo một vectơ trống như vậy

vec <- numeric(0)

Và sau đó thêm các phần tử bằng c ()

vec <- c(vec, 1:5)

Tuy nhiên, như romunov nói, tốt hơn nhiều là phân bổ trước một vectơ và sau đó điền nó (vì điều này tránh phân bổ lại một bản sao mới của vectơ của bạn mỗi khi bạn thêm các phần tử)


Tôi thích giải pháp của bạn với số (), nhưng kinh nghiệm của tôi đã khiến tôi sử dụng NA thay vì 0 (nếu bạn sử dụng số (2), bạn sẽ nhận được 0 0). Nhưng đó là sở thích cá nhân của tôi.
Roman Luštrik

Cảm ơn nhiều!! Nhưng có thể giải phóng phần trước sau khi thêm một phần tử mới không? tôi có nên sử dụng rm () không?
ligwin

Có một vấn đề khác là typeof (số (0)) cho "double" trong khi các phần tử muốn cho "integer", khi thêm vào sẽ xuất hiện lỗi thông báo "Loại cho giá trị mới không được khác", làm thế nào để chuyển đổi?
ligwin

Khi làm việc trong python, "as" là một từ khóa, ngoài ra, python không có các kiểu dữ liệu như vậy, vì vậy tôi nghĩ "as.integer" sẽ không hoạt động?
ligwin

romunov - số (0) phương tiện tạo ra một vector số với chiều dài từ 0 (tức là không có phần tử) không phải là một vector có độ dài 1 với yếu tố đó là 0
Aaron Statham

6

Để tạo một vectơ trống, hãy sử dụng:

vec <- c();

Xin lưu ý, tôi không đưa ra bất kỳ giả định nào về loại vectơ bạn yêu cầu, ví dụ: số.

Khi vector đã được tạo, bạn có thể thêm các phần tử vào nó như sau:

Ví dụ: để thêm giá trị số 1:

vec <- c(vec, 1);

hoặc để thêm giá trị chuỗi "a"

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

4
Bạn đã thực sự thử điều này chưa? vec <- c()đặt vec thành NULL. Nếu bạn muốn một vector rỗng bạn sẽ sử dụng vec <- character(), vec <- numeric()vv
Matthew khôn ngoan

5

Tôi cũng đã thấy

x <- {}

Bây giờ bạn có thể nối hoặc liên kết một vectơ có thứ nguyên bất kỳ với x

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

2
Điều này hoàn toàn giống với x <- NULLvà không tạo ra bất kỳ điều gì khác ngoài một tham chiếu đến hư không.
Joris Meys

3

Như đã chỉ ra bởi Brani, vector () là một giải pháp, ví dụ:

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

sẽ trả về một vectơ có tên "newVector" với 50 giá trị "0" là giá trị ban đầu. Cũng khá phổ biến khi chỉ thêm đại lượng vô hướng mới vào một vectơ hiện có để đi đến một vectơ được mở rộng, ví dụ:

aVector <- c(aVector, newScalar)


2

Trong rpy2, cách để lấy toán tử giống như "[" với R là sử dụng ".rx". Xem tài liệu về giải nén bằng rpy2

Đối với việc tạo vectơ, nếu bạn biết cách sử dụng Python thì sẽ không có vấn đề gì. Xem tài liệu về cách tạo vectơ


Tôi đã từng tạo một hàm trong python cho mục đích này, điều này rất phức tạp và tôi không chắc nó có thể áp dụng rộng rãi như thế nào. Bây giờ tôi nghĩ rằng với những hoạt động này, cuộc sống có thể được dễ dàng hơn nhiều :)
ligwin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.