这里是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环境中编写函数,因此解决方案应该包括这两个。
我已尝试在此网站上搜索,但我还没有找到有帮助的答案。有任何想法吗?提前谢谢。