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

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,

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