[R] Looping through R objects with $ operator and tags

baptiste auguie baptiste.auguie at googlemail.com
Thu Jul 30 18:40:01 CEST 2009


essentially the same,

object1 = object2 = object3 = data.frame(Distance = 1:10)

foo = function(o){
	within(get(o), LogDist <- log10(Distance))
	}
	
my.objects = paste("object", 1:3,sep="")	
lapply(my.objects, foo)	


It is however advisable to group the initial objects in a list, or in
a long format data.frame.

HTH,

baptiste

2009/7/30 jim holtman <jholtman at gmail.com>:
> I would first put the objects in a 'list' since it is easier to work
> with and then use 'lapply':
>
>> obj1 <- obj2 <- obj3 <- data.frame(Distance=1:10)
>> # create a list - earier to work with
>> list.obj <- list(obj1, obj2, obj3)
>>
>> list.obj <- lapply(list.obj, function(x){
> +     x$LogDist <- log(x$Distance)
> +     x   # return the modified value
> + })
>>
>> list.obj
> [[1]]
>   Distance   LogDist
> 1         1 0.0000000
> 2         2 0.6931472
> 3         3 1.0986123
> 4         4 1.3862944
> 5         5 1.6094379
> 6         6 1.7917595
> 7         7 1.9459101
> 8         8 2.0794415
> 9         9 2.1972246
> 10       10 2.3025851
>
> [[2]]
>   Distance   LogDist
> 1         1 0.0000000
> 2         2 0.6931472
> 3         3 1.0986123
> 4         4 1.3862944
> 5         5 1.6094379
> 6         6 1.7917595
> 7         7 1.9459101
> 8         8 2.0794415
> 9         9 2.1972246
> 10       10 2.3025851
>
> [[3]]
>   Distance   LogDist
> 1         1 0.0000000
> 2         2 0.6931472
> 3         3 1.0986123
> 4         4 1.3862944
> 5         5 1.6094379
> 6         6 1.7917595
> 7         7 1.9459101
> 8         8 2.0794415
> 9         9 2.1972246
> 10       10 2.3025851
>
>
>
> On Thu, Jul 30, 2009 at 12:04 PM, Vivek Ayer<vivek.ayer at gmail.com> wrote:
>> Hi all,
>>
>> Suppose I want to set the values in a column to the log of the values
>> of another column like so:
>>
>> object$LogDist <- log10(object$Distance)
>>
>> How do I loop through the objects if I have object1, object2, etc to
>> perform this function?
>>
>> object1$LogDist <- log10(object1$Distance)
>> object2$LogDist <- log10(object2$Distance)
>> object3$LogDist <- log10(object3$Distance)
>>
>> I was trying to use the assign and paste functions like so:
>>
>> for (i in c(1:10))
>> assign(paste("object",i,"$LogDist"),log10(as.name(paste("object",i,"$LogDist")))
>>
>> but that didn't work out. It creates objects with whole name
>> object1$LogDist instead of just manipulating the column that's part of
>> that object.
>>
>> Help appreciated,
>> Vivek
>>
>> ______________________________________________
>> 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.
>>
>
>
>
> --
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
>
> What is the problem that you are trying to solve?
>
> ______________________________________________
> 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.
>



-- 
_____________________________

Baptiste Auguié

School of Physics
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK

http://newton.ex.ac.uk/research/emag




More information about the R-help mailing list