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

David Carlson dcarlson at tamu.edu
Fri May 31 19:56:19 CEST 2013

```Another possibility:

IE <- speciesTime1[,-1] - speciesTime2[,-1]
Imm <- data.frame(addmargins(as.matrix(ifelse(IE<0, -1, 0)*IE), 2))
Imm
Exti <- data.frame(addmargins(as.matrix(ifelse(IE>0, 1, 0)*IE), 2))
Exti

-------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77840-4352

-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
Behalf Of arun
Sent: Thursday, May 30, 2013 5:38 PM
To: Kristi Glover
Cc: R help
Subject: Re: [R] How can I write logical function in R?

Hi,
May be this helps:
speciesTime1New<- speciesTime1[,-1]
speciesTime2New<- speciesTime2[,-1]
imm1<-as.data.frame(matrix(0,4,3))
imm1[]<-lapply(seq_len(ncol(speciesTime2New)),function(i)
ifelse(speciesTime2New[,i]==1&
speciesTime2New[,i]!=speciesTime1New[,i],1,0))
Ext1<-as.data.frame(matrix(0,4,3))
Ext1[]<-lapply(seq_len(ncol(speciesTime1New)),function(i)
ifelse(speciesTime1New[,i]==1&
speciesTime1New[,i]!=speciesTime2New[,i],1,0))
library(plyr)
imm1New<-mutate(imm1,sum=rowSums(cbind(sp1,sp2,sp3)))
Ext1New<-mutate(Ext1,sum=rowSums(cbind(sp1,sp2,sp3)))
imm1New
#  sp1 sp2 sp3 sum
#1   1   0   0   1
#2   0   0   1   1
#3   0   0   0   0
#4   1   1   1   3
Ext1New
#  sp1 sp2 sp3 sum
#1   0   0   0   0
#2   1   0   0   1
#3   0   0   1   1
#4   0   0   0   0

#or

imm2<-sapply(seq_len(ncol(speciesTime2New)),function(i)
ifelse(speciesTime2New[,i]==1&
speciesTime2New[,i]!=speciesTime1New[,i],1,0))
Ext2<-sapply(seq_len(ncol(speciesTime1New)),function(i)
ifelse(speciesTime1New[,i]==1&
speciesTime1New[,i]!=speciesTime2New[,i],1,0))
imm2\$sum<-rowSums(imm2)
Ext2<-as.data.frame(Ext2)
Ext2\$sum<-rowSums(Ext2)
colnames(imm2)<-colnames(imm1New)
colnames(Ext2)<-colnames(Ext1New)
identical(imm2,imm1New)
#[1] TRUE
identical(Ext2,Ext1New)
#[1] TRUE
A.K.

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
===

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help