我想计算R中许多对象的长度,并返回名称前缀为“length_”的对象。但是,当我输入此代码时:
A <- c('A', 'B', '3')
B <- c('A', '2')
files <- ls()
for (i in 1:length(files)) assign(paste("length_",files[i], sep = ""), length(unlist(files[i])))
这将返回向量length_A和length_B,但每个向量的值为1而不是3和2。
感谢您的帮助, 保罗
P.S。我实际上想将它应用于不同的函数而不是长度(来自包ape的GC.content来计算DNA序列的GC含量),但是使用该函数我具有与上述示例相同的问题。
答案 0 :(得分:2)
在R 3.2.0中,引入了lengths
函数,该函数计算列表中每个项目的长度。使用此功能,如上文评论中的@ docendo-discimus注释,超紧凑(和类R)解决方案
lengths(mget(ls()))
返回一个命名向量
A B
3 2
mget
返回环境中的对象列表,有点像“多个get
。”
答案 1 :(得分:0)
A <- c('A', 'B', '3')
B <- c('A', '2')
files <- list(A,B)
sapply(files,length)
这会给你答案,但我不知道它是不是你想要的。
答案 2 :(得分:0)
A <- c('A', 'B', '3')
B <- c('A', '2')
files <- ls()
for (i in 1:length(files)) assign(paste("length_",files[i], sep = ""), length(get(files[i])))
这将创建值为3的length_A和值为2的length_B。