使用data.frame作为函数参数会产生无效的下标类型' list'

时间:2017-04-12 13:27:45

标签: r list function lapply sapply

这里是R的新手。

作为作业的一部分,我有一个类似下面的列表。

irisL <- split(iris, iris$Species)

我想用这个列表来比较三种物种setosa,versicolor和virginica中的Sepal.Length。

我写过这个函数,它一次比较两个物种。

similarity <- function(x,y){
incommon <- intersect(irisL[[x]][1],irisL[[y]][1])
all <- union(irisL[[x]][1],irisL[[y]][1])
percentage <- 100*(nrow(incommon)/nrow(all))
return(percentage)
}
similarity('setosa','versicolor')

这可以工作并提供我想要的数字输出,但需要手动比较两种物种的所有可能组合。然后我按照给定的赋值中的,在一个lapply和sapply函数中编写了这个函数,如下所示。

sim <- lapply(irisL, function(x){
sapply(irisL,function(y){
incommon <- intersect(irisL[[x]][1],irisL[[y]][1])
all <- union(irisL[[x]][1],irisL[[y]][1])
percentage <- 100*(nrow(incommon)/nrow(all))
return(percentage)
})
})

这应该通过irisL列表一个接一个地进行,然后比较相同的irisL列表。我想要的输出是一个9x9列表,每个比较的百分比。 但是,我收到错误:

Error in irisL[[x]] : invalid subscript type 'list' 

我不确定为什么会发生这种情况,因为irisL [[&#39; setosa&#39;]],irisL [[&#39; versicolor&#39;]]等都是data.frames。另外,我应该在lapply-sapply环境中编写函数,因此解决方案应该包括这两个。

我已尝试在此网站上搜索,但我还没有找到有帮助的答案。有任何想法吗?提前谢谢。

0 个答案:

没有答案