访问R中的列表元素

时间:2013-01-28 22:00:06

标签: r

我有一个名为“training_data”的列表。 “training_data”列表包含使用以下函数从多个文件读取的数据。

training_data <- lapply(files, read.table, header=TRUE, sep=",")

我可以使用以下命令访问任何数据集的第一个字段:

training_data[[1]][1]           # The first field contains the class "pos OR neg"

我必须使用支持向量机(e1071)将这些数据集(包含在training_data中)用于二进制分类。但问题是某些数据集只包含一个类的数据,即所有pos或所有neg,这对于svm函数是不可接受的,我想排除这些数据集。我尝试了以下代码,但无法访问类列。

training_data<-lapply(training_data, 
                function(data)
                 {
                    if(["the class field is always positive"])
                       ### exclude this dataset from training_data

                 })

更新: 我究竟能如何访问传递给函数的第一列数据?如何从training_data中排除那些只包含类列中一个类的数据集?

由于

2 个答案:

答案 0 :(得分:2)

这就是Filter功能的用途。由于您未提供复制代码,因此以下是有关如何使用Filter的快速示例。假设你有一个很大的向量列表,每个长度为2个元素:

mylist <- lapply(1:1000, function(i) c(runif(1), runif(1)))

现在,如果你想只保留第一个元素大于0.5的列表中的那些向量,你可以这样做:

filtered_list <- Filter(function (x) x[1] > 0.5, mylist)

现在,如果mylist的每个元素都是data.frame,并且每个data.frame中的第一列是模型的响应向量,就像您的数据一样,您可以使用Justin提到的data[,1]符号来过滤掉第一列中只有正值或负值的所有data.frames

filtered_list <- Filter(function (x) { !(all(x[,1] < 0) || all(x[,1] > 0))}, 
                        mylist)

答案 1 :(得分:1)

您将访问与之前相同的第一个元素。对象data现在可以在函数内部使用,并且与您在列表中读入的每个数据集具有相同的结构。因此,data[1]或更明确地data[,1]将访问它们。

我建议您查看R的许多优秀指南(特别是cran.r-project.org上列出的那些指南),以更好地了解该功能的工作原理以及如何分割数据。

如果我没有回答您的问题,请随意询问另一个问题或编辑此问题,以包含一些复制您正在查找的问题的示例数据。就目前而言,这个问题可能会被关闭。