是否有内置的便利函数返回data.frame,matrix或vector中的元素数量? length( matrix )
和length( vector )
有效,但length( data.frame )
会返回列数。 prod( dim( vector ) )
始终返回1,但与matrix / data.frame一起正常工作。我正在寻找适用于所有三种功能的单一功能。
答案 0 :(得分:6)
我不认为一个已经存在,所以只写自己的。您应该只需要2个案例,1)列表,2)数组:
elements <- function(x) {
if(is.list(x)) {
do.call(sum,lapply(x, elements))
} else {
length(x)
}
}
d <- data.frame(1:10, letters[1:10])
m <- as.matrix(d)
v <- d[,1]
l <- c(d, list(1:5))
L <- list(l, list(1:10))
elements(d) # data.frame
# [1] 20
elements(m) # matrix
# [1] 20
elements(v) # vector
# [1] 10
elements(l) # list
# [1] 25
elements(L) # list of lists
# [1] 35
答案 1 :(得分:5)
length(unlist(whatever))
怎么样?
(注意:我只想回答说没有这样的功能,但我突然想起我刚刚在30分钟前使用过unlist,并且可以应用它来获得简单的解决方案!真是巧合...)
答案 2 :(得分:1)
我个人的“便利功能”是:
Rgames: lssize
function(items){
sizes<-sapply(sapply(sapply(sapply(items,get,simplify=F),unlist,simplify=F),as.vector,simplify=F),length)
return(sizes)
}
它适用于我能想到的每个'typeof'变量。 FWIW,它是我的工具包的一部分,其中包括有用的“在我的工作区中只查找一种类型的变量”:
Rgames: lstype
function(type='closure'){
inlist<-ls(.GlobalEnv)
if (type=='function') type <-'closure'
typelist<-sapply(sapply(inlist,get),typeof)
return(names(typelist[typelist==type]))
}