2013-07-19 38 views
7

Trong số Answer này, một alist() được đề xuất như một phương tiện dễ dàng để tạo danh sách có các phần tử trống. Một trường hợp sử dụng cho điều này sẽ được xây dựng một danh sách phù hợp cho một cuộc gọi đến [ được sắp xếp qua do.call(). Ví dụ:Tạo độ dài biến `alist()`

x <- matrix(1:6, ncol = 2) 
do.call(`[`, alist(x, , 2)) ## extract column 2 of x 

[1] 4 5 6 

Các Đặc biệt Question khiến alist() trả lời yêu cầu các thiết lập của các đối số rỗng tự động trên cơ sở của một đối tượng shortdim.

Nếu ai biết có bao nhiêu kích thước là một trong hiện tại có thể làm

al <- alist(, ,) ## 3 arguments for a 2-d object 
al[[1]] <- x 
shortdim <- 1 
al[[shortdim + 1]] <- 1:2 ## elements 1 & 2 of dim shortdim, plus all other dims 
do.call(`[`, al) 

> do.call(`[`, al) 
    [,1] [,2] 
[1,] 1 4 
[2,] 2 5 
> x[1:2, ]   ## equivalent too 
    [,1] [,2] 
[1,] 1 4 
[2,] 2 5 

Một danh sách dài năng động có thể được tạo ra bởi vector(), ví dụ:

ll <- vector(mode = "list", length = length(dim(x)) + 1) 

Nhưng một alist không thể được thực hiện bằng theo cách đó

> vector(mode = "alist", length = length(dim(x)) + 1) 
Error in vector(mode = "alist", length = length(dim(x)) + 1) : 
    vector: cannot make a vector of mode 'alist'. 

Có cách nào để tạokhôngcủa độ dài động có thể được điền vào sau này khi cần thiết?

+1

Annoyingly, 'alist()' doesn Không tạo danh sách độ dài 1, nhưng 'alist (,)' tạo danh sách độ dài 2 .... –

+4

Related (và chứa câu trả lời) [Chọn dọc theo một trong các tham số n trong mảng] (http: // stackoverflow .com/a/14502298/271616) –

+0

Nếu một trong hai @JoshuaUlrich hoặc @ JoshO'Brien muốn đăng 'rep (danh sách (bquote()), n)' thành ngữ như một câu trả lời Tôi nghiêng để chấp nhận rằng như là một 'alist 'thực sự không có gì thuộc loại này, tôi s "danh sách", đó là những gì nó tạo ra. Nếu bạn không muốn tôi đăng nó như một câu trả lời. –

Trả lời

13

OK, tôi sẽ cắn. Tôi có thể sẽ sử dụng list(bquote()) để tạo danh sách một phần tử chứa biểu tượng trống và rep cho đến độ dài mong muốn.

n <- 2 
rep(list(bquote()), n) 
# [[1]] 
# 
# 
# [[2]] 
# 
# 

Như một phần thưởng, đây là một bộ sưu tập của 5 cách để tạo/truy cập vào biểu tượng trống đó là cần thiết như nội dung của mỗi phần tử danh sách:

bquote() 
# 
substitute() 
# 
quote(expr=) 
# 
formals(function(x) {})$x 
# 
alist(,)[[1]] 
# 
+1

Xem thêm https://github.com/hadley/devtools/wiki/Expressions#names – hadley

4

Nhờ Ferdinand Kraft:

# no. of elements in the alist 
n <- 5 
a <- rep(alist(,)[1], n) 
+2

Tác phẩm này: 'rep (alist (,) [1], 3)'. –

+0

@ Ferdinand.kraft D'oh !!! Cảm ơn. Tôi đã cố gắng làm 'rep (a [[1]])', không phải 'rep (a [1])'. –

+0

@ Ferdinand.kraft Trên thực tế, nếu bạn muốn đặt câu trả lời đó, tôi sẽ xóa tên của tôi. –

Các vấn đề liên quan