[R] How can I write logical function in R?

Rui Barradas ruipbarradas at sapo.pt
Thu May 30 23:55:28 CEST 2013


Hello,

Try the following. Maybe there are simpler ways, but it seems to work.



fun <- function(df1, df2){
	pres.abs <- function(x, y){
		x <- as.logical(x)
		y <- as.logical(y)
		1*(x & !y)
	}
	res <- matrix(nrow = nrow(df1), ncol = ncol(df1) - 1)
	rownames(res) <- df1$site
	colnames(res) <- colnames(df1)[-1]
	for(st in df1$site){
		for(sp in colnames(res)){
			res[st, sp] <- pres.abs(df1[st, sp], df2[st, sp])
		}
	}
	res <- cbind(res, sum = rowSums(res))
	as.data.frame(res)
}

imm2 <- fun(speciesTime2, speciesTime1)
Exti2 <- fun(speciesTime1, speciesTime2)


Hope this helps,

Rui Barradas

Em 30-05-2013 22:28, Kristi Glover escreveu:
> Hi R -Users
> I am sorry for bothering you. I was wondering what script can work to calculate an immigration and extinction from two tables (time 1 and time 2). I could easily  calculate them in the Excel for small data set, but I have very big data set. so that I was wondering to use R for this calculation. But I could not figure it out to write these logical function in R.  Would you provide me some hints?
>
> For example, I have these two tables
> speciesTime1<-structure(list(site = 1:4, sp1 = c(0L, 1L, 1L, 0L), sp2 = c(0L,
> 1L, 1L, 0L), sp3 = c(1L, 0L, 1L, 0L)), .Names = c("site", "sp1",
> "sp2", "sp3"), class = "data.frame", row.names = c(NA, -4L))
>
> speciesTime2<-structure(list(site = 1:4, sp1 = c(1L, 0L, 1L, 1L), sp2 = c(0L,
> 1L, 1L, 1L), sp3 = c(1L, 1L, 0L, 1L)), .Names = c("site", "sp1",
> "sp2", "sp3"), class = "data.frame", row.names = c(NA, -4L))
>
>>From these two tables: I wanted to make the following two tables (Imm and Exti]
> [Imm means number of "sp" present in speciesTime2, but not in speciesTime1]
> imm<-structure(list(sp1 = c(1L, 0L, 0L, 1L), sp2 = c(0L, 0L, 0L, 1L
> ), sp3 = c(0L, 1L, 0L, 1L), sum = c(1L, 1L, 0L, 3L)), .Names = c("sp1",
> "sp2", "sp3", "sum"), class = "data.frame", row.names = c(NA,
> -4L))
>
> [Exti=number of "sp" absent in speciesTime2, but present in speciesTime1]
>
> Exti<-structure(list(sp1 = c(0L, 1L, 0L, 0L), sp2 = c(0L, 0L, 0L, 0L
> ), sp3 = c(0L, 0L, 1L, 0L), sum = c(0L, 1L, 1L, 0L)), .Names = c("sp1",
> "sp2", "sp3", "sum"), class = "data.frame", row.names = c(NA,
> -4L))
> Thanks
> KG
> ===
>
>
>
>   		 	   		
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list