我有一个名为“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中排除那些只包含类列中一个类的数据集?
由于
答案 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上列出的那些指南),以更好地了解该功能的工作原理以及如何分割数据。
如果我没有回答您的问题,请随意询问另一个问题或编辑此问题,以包含一些复制您正在查找的问题的示例数据。就目前而言,这个问题可能会被关闭。