Skip to content

Instantly share code, notes, and snippets.

@bmoska bmoska/isSubset.R Secret
Last active Jan 5, 2018

Embed
What would you like to do?
isSubset.R
library(foreach)
library(doParallel)
library(arules)
library(Rcpp)
library(isSub) #this is our Rcpp library
#register cores
registerDoParallel(3)
#function searching for a subsets
issub=function(data){
issub=rep(0,nrow(data))
Antecedent=data$lhs
Consequent=data$rhs
length=nrow(data)
for(i in 1:length){
for(j in (i+1):length){
if(isTRUE(grepl(Antecedent[j], Antecedent[i]))){
issub[i]=1
}
else if(isTRUE(grepl(Antecedent[i], Antecedent[j]))){
issub[j]=1
}
}
}
data$isSubset=issub
return(data)
}
#change datatype of rhs and lhs to character, removing '{}'
data$lhs=as.character(data$lhs)
data$rhs=as.character(data$rhs)
data$lhs=gsub('[{}]',replace='',data$lhs)
data$rhs=gsub('[{}]',replace='',data$rhs)
#create table of unique consequents-used for parallel computation with foreach
listOfUniqueConsequents=table(data$rhs)
#here calculation are performed sequentially, after division of the dataset into subgroups of unique consequents
resultsSequentiallyR=c()
resultsSequentiallyRcpp=c()
for(i in 1:length(listOfUniqueConsequents)){
subset=data[which(data$rhs==as.character(as.integer(names(listOfUniqueConsequents[i])))),]
resultsSequentiallyR=c(resultsSequentiallyR,issub(subset))
resultsSequentiallyRcpp=c(resultsSequentiallyRcpp,isSubset(subset))
}
#foreach with Rcpp function-remember to include package, otherwise function would not be exported
resultsParallelRcpp=foreach(k=1:length(listOfUniqueConsequents),.packages=c("isSub"))%dopar%{isSubset(data[which(data$rhs==as.character(as.integer(names(listOfUniqueConsequents[k])))),])}
#foreach with R function
resultsParallelR=foreach(k=1:length(listOfUniqueConsequents))%dopar%{issub(data[which(data$rhs==as.character(as.integer(names(listOfUniqueConsequents[k])))),])}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.