Farrel, tôi không chính xác làm theo 'mục' không phải là loại R. Có lẽ bạn có một chiều dài là list
trong đó mỗi phần tử là một vectơ của chuỗi ký tự?
Trong trường hợp đó, hãy xem xét điều này:
R> fl <- list(A=c("un", "deux"), B=c("one"), C=c("eins", "zwei", "drei"))
R> lapply(fl, function(x) length(x))
$A
[1] 2
$B
[1] 1
$C
[1] 3
R> do.call(rbind, lapply(fl, function(x) length(x)))
[,1]
A 2
B 1
C 3
R>
Vì vậy, bạn vector của chiều dài của danh sách của bạn, nói cho bạn nhiều chuỗi mỗi phần tử danh sách đã có. Không phải là do.call(rbind, someList)
vừa qua khi chúng tôi nhận được danh sách từ lapply
.
Nếu mặt khác bạn muốn tính chiều dài của tất cả các chuỗi tại từng vị trí danh sách, thay thế đơn giản length(x)
với một chức năng mới đếm ký tự:
R> lapply(fl, function(x) { sapply(x, function(y) nchar(y)) })
$A
un deux
2 4
$B
one
3
$C
eins zwei drei
4 4 4
R>
nếu đó không phải muốn bạn muốn , có lẽ bạn có thể giả lập một số dữ liệu đầu vào ví dụ?
Edit:: Đáp lại ý kiến của bạn, những gì bạn muốn có lẽ là
R> do.call(rbind, lapply(fl, length))
[,1]
A 2
B 1
C 3
R>
Lưu ý rằng tôi vượt qua trong length
, tên của một hàm, và không length()
, các (hiển thị) phần thân của hàm. Bởi vì đó là dễ dàng để trộn lên, tôi chỉ đơn giản là áp dụng gần như luôn luôn bọc một chức năng vô danh xung quanh như trong câu trả lời đầu tiên của tôi.
Và vâng, điều này cũng có thể được thực hiện chỉ với sapply
hoặc thậm chí một số **ply
chức năng:
R> sapply(fl, length)
A B C
2 1 3
R> laply(fl, length)
[1] 2 1 3
R>
Cách thứ nhất bạn đã làm điều đó là những gì tôi muốn. Để tôi thử đi. – Farrel
Yip, nó hoạt động. Tuyệt diệu. Trong thực tế sapply làm việc tốt hơn bởi vì nó thực hiện một vector đơn giản mà bây giờ tôi có thể đi và cbind vào một dataframe từ trước. Bây giờ bạn có thể giải thích cho tôi như thế nào lapply (name.of.list, length()) và lapply (name.of.list, chức năng (x) chiều dài (x)) là khác nhau. – Farrel
Vui lòng xem phần chỉnh sửa bổ sung tại câu trả lời của tôi - về bản chất 'độ dài' khác với' length() 'và bạn muốn cái cũ. –