2013-08-13 27 views
5

tôi có một danh sách, với 3 "cột":nhận các mục nhập đầu tiên trong các hàng trong danh sách?

test = list(1:100, 1:100,1:100) 

Làm thế nào tôi có thể truy cập vào các ví dụ 10 mục đầu tiên của mỗi cột?

test[c(1:10),] 

không hoạt động. Tôi biết nó hoạt động cho data.frames:

as.data.frame(test)[1:10,1:3] 

Làm cách nào để giải quyết vấn đề này với danh sách?

Chỉnh sửa: Để nhận câu trả lời tổng quát hơn:

Làm cách nào để nhận các mục nhập 15 đến 20 trong cột 1 và 3? Đây là những gì tôi làm cho data.frames:

as.data.frame(test)[c(15:20),c(1,3)] 

Có vẻ như việc lập chỉ mục khác nhau rất nhiều giữa data.frames và danh sách.

+6

Hi, tôi nhận thấy bạn có * không bao giờ * bình chọn/chấp nhận câu trả lời. Bạn có thể muốn đọc các phần [** about **] (http://stackoverflow.com/about) và [** FAQ **] (http://stackoverflow.com/faq) của trang web để giúp bạn tận dụng tối đa SO. Nếu câu trả lời giải quyết vấn đề của bạn, bạn có thể muốn * xem xét * upvoting và/hoặc đánh dấu nó như được chấp nhận để hiển thị câu hỏi đã được trả lời, bằng cách đánh dấu vào dấu kiểm màu xanh bên cạnh câu trả lời phù hợp. Bạn không ** có nghĩa vụ phải làm điều này, nhưng nó giúp giữ cho trang web sạch sẽ của các câu hỏi chưa được trả lời và thưởng cho những người dành thời gian để giải quyết vấn đề của bạn. –

Trả lời

9

Bạn có thể làm điều đó với các chức năng lapply()head().

lapply(test,head,n=10) 
[[1]] 
[1] 1 2 3 4 5 6 7 8 9 10 

[[2]] 
[1] 1 2 3 4 5 6 7 8 9 10 

[[3]] 
[1] 1 2 3 4 5 6 7 8 9 10 

Nếu có ít hơn n= giá trị trong phần tử danh sách thì giá trị này hiển thị tất cả các giá trị.

test = list(1:100, 1:100,1:5) 
lapply(test,head,n=10) 
[[1]] 
[1] 1 2 3 4 5 6 7 8 9 10 

[[2]] 
[1] 1 2 3 4 5 6 7 8 9 10 

[[3]] 
[1] 1 2 3 4 5 
+0

+1 để tính toán các trường hợp cạnh. –

3

Tùy thuộc vào kiểu trả về mà bạn muốn, lapply hoặc sapply sẽ hữu ích. Tôi muốn sử dụng [ để có được những yếu tố mà bạn muốn:

lapply(test , `[` , 1:10) 
[[1]] 
[1] 1 2 3 4 5 6 7 8 9 10 

[[2]] 
[1] 1 2 3 4 5 6 7 8 9 10 

[[3]] 
[1] 1 2 3 4 5 6 7 8 9 10 

sapply(test , `[` , 1:10) 
     [,1] [,2] [,3] 
[1,] 1 1 1 
[2,] 2 2 2 
[3,] 3 3 3 
[4,] 4 4 4 
[5,] 5 5 5 
[6,] 6 6 6 
[7,] 7 7 7 
[8,] 8 8 8 
[9,] 9 9 9 
[10,] 10 10 10 
+0

giải pháp lapply() của bạn sẽ tạo ra các giá trị NA nếu có ít hơn 10 giá trị trong phần tử danh sách và điều đó có thể gây hiểu lầm. –

+0

@DidzisElferts được lấy, nhưng đó không phải là một phần của vấn đề ban đầu. Nếu OP trở lại và nói rằng đó là một yêu cầu tôi sẽ sử dụng giải pháp của bạn. –

2

Bạn có thể sử dụng chức năng Map đó là hữu ích nếu bạn có hai hay nhiều hơn hai đầu vào trong một hàm:

mytest<-Map(function(x) x[1:10], test) 
> mytest 
[[1]] 
[1] 1 2 3 4 5 6 7 8 9 10 

[[2]] 
[1] 1 2 3 4 5 6 7 8 9 10 

[[3]] 
[1] 1 2 3 4 5 6 7 8 9 10 
+3

Đơn giản hóa thành: 'Bản đồ (đầu, kiểm tra, 10)'. – Thomas

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