Skip to content

Instantly share code, notes, and snippets.

@syou6162
Created September 13, 2008 01:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save syou6162/10544 to your computer and use it in GitHub Desktop.
Save syou6162/10544 to your computer and use it in GitHub Desktop.
集合を扱う関数などなど
#直積を書き出す関数
write.direct.product <- function(x,y){
e <- expand.grid(x,y)
m <- mapply(function(x,y){paste("(",x,",",y,")",sep="")},e[,1],e[,2])
return(paste("{",paste(m,collapse=","),"}",sep=""))
}
write.direct.product(1:3,4:6)
#R \times RからRへの写像の例
apply(expand.grid(1:3,4:6),1,function(x){x[1]*x[2]})
apply(expand.grid(letters[1:3],1:3),1,function(d){Reduce(function(x,init){paste(init,x,sep="")},rep(d[1],d[2]),init="")})
#和集合を作る操作
my.union <- function(list){
Reduce(function(x,init){unlist(union(x,init))},list,list())
}
my.union(list(1:30,2:50,4:1,list(1,2,list(3,4))))
my.union(list(list(1,2),list(3,4)))
#共通集合を作る操作
my.intersect <- function(list){
Reduce(function(x,init){unlist(intersect(x,init))},list,list[[1]])
}
my.intersect(list(1:30,2:50,4:10))
#冪集合を返す関数。空集合はNAにしてみた
powerset <- function(list){
c(NA,unlist(lapply(seq(length(list)),function(x){apply(combn(list,x),2,function(y){y})}),recursive=FALSE))
}
#冪集合の例
powerset(list("a","b","c"))
lapply(powerset(list("a","b","c")),unlist)
powerset(list("a","b","c","d",1:10))
lapply(powerset(list("a","b","c","d")),unlist)[[x]]
my.union(mapply(function(x){lapply(powerset(list("a","b","c","d")),unlist)[[x]]},c(16,15)))
my.intersect(mapply(function(x){lapply(powerset(list("a","b","c","d")),unlist)[[x]]},c(16,1)))
write.list <- function(list){
write.vector <- function(vector){
return(paste("{",paste(vector,collapse=","),"}",sep=""))
}
write.list.intern <- function(list){
ifelse(is.list(list),Reduce(function(init,x){paste(init,write.list.intern(x),sep="")},list,""),write.vector(list))
}
gsub("NA","",paste("{",gsub("\\}\\{","\\},\\{",write.list.intern(list)),"}",sep=""))
}
write.list(list("a","b","c","d",list(1:10,list(1,2))))
write.list(lapply(powerset(list("a","b","c","d")),unlist))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment