繁体   English   中英

如何访问R中列表元素的组件

[英]How can I access components of list elements in R

我有一个参差不齐的清单,我想合作。 即我想使用一个apply函数来快速简单地从列表中提取元素。 以下代码尝试近似我的情况:

vec1 <- c("B","D","E","NA")
vec2 <- c("B","D","E","NA")
vec3 <- c("B","C","E","NA")


write.table(vec1, file="./vec1.csv", sep=",", quote=F)
write.table(vec2, file="./vec2.csv", sep=",", quote=F)
write.table(vec3, file="./vec3.csv", sep=",", quote=F)

vectors.files <- list.files(path=getwd(),recursive=F, pattern=paste("*.csv",sep=""))

vectors.list <- lapply(vectors.files, read.csv)

那么,我如何才能创建一个新对象,例如,它是vectors.list中每个列表元素的第二行?

谢谢,

马特

如果将向量存储在数据框中,则可以子集化。

> df <- data.frame(vectors.list)
> row2 <- df[2,]
> row2
  x x.1 x.2
2 D   D   C

目前尚不清楚最终输出格式是什么,但是您可能想尝试以下模板的变体:

lapply(vectors.list, function(x) x[2, , drop = FALSE])
# [[1]]
#   x
# 2 D
# 
# [[2]]
#   x
# 2 D
# 
# [[3]]
#   x
# 2 C

在这里,我们刚刚将匿名函数( function(x) )传递给“ vectors.list”中的项目。 在这种情况下,我们使用了使用[基本子集来提取第二行。 drop = FALSE将保留data.frame结构,因为结果是单列data.frame (通常简化为vector )。

请注意,结果list中的data.frame仍然具有“ x” factor所有原始levels 如果您只想保留该行中的特定因素,请使用droplevels

相比:

str(lapply(vectors.list, function(x) x[2, , drop = FALSE]))
# List of 3
#  $ :'data.frame':  1 obs. of  1 variable:
#   ..$ x: Factor w/ 3 levels "B","D","E": 2
#  $ :'data.frame': 1 obs. of  1 variable:
#   ..$ x: Factor w/ 3 levels "B","D","E": 2
#  $ :'data.frame': 1 obs. of  1 variable:
#   ..$ x: Factor w/ 3 levels "B","C","E": 2
str(lapply(vectors.list, function(x) droplevels(x[2, , drop = FALSE])))
# List of 3
#  $ :'data.frame':  1 obs. of  1 variable:
#   ..$ x: Factor w/ 1 level "D": 1
#  $ :'data.frame': 1 obs. of  1 variable:
#   ..$ x: Factor w/ 1 level "D": 1
#  $ :'data.frame': 1 obs. of  1 variable:
#   ..$ x: Factor w/ 1 level "C": 1

您可能还想探索as.character(unlist(x[2, ])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM