[R] create an object in a loop (v4)

Ivan Calandra ivan.calandra at uni-hamburg.de
Wed Feb 3 11:09:00 CET 2010


Hi everybody,

I have just thought that it might help if I would provide a sample data 
set. I have attached it as a txt file (tab separated).

Here is the "modified" code to fit this data set.
----
library(WRS)
file <- read.table(file=file.choose(), header=T, sep="\t")
seq.num<- c(4,5)        #column (variable) indexes to be used as 
numerical variables

# fac2list() separates the data from file[,k] into groups from levels in 
file[3] and store into list mode.
for(i in 1:length(seq.num)) {
   k<- seq.num[i]
   name.num<- names(file)[k]
   assign(paste(names(file)[3], name.num, sep="_"), fac2list(file[,k], 
file[3]))
   names(paste(names(file)[3], name.num, sep="_"))<- 
levels(factor(file[[3]]))  #that line doesn't work, but I would like 
something in this direction,
}                                                                                                                  
#I couldn't make it work with get() either
----

Desired output (I named it "manually"):
 > TO_POS_Asfc.median
$M1
[1] 143.2065 180.0317 121.6397 175.0321 196.7545 208.3876
$M2
  [1]  83.76985 190.26124  35.94771 158.67638 228.32178 247.06147  53.97887
  [8] 218.60500 210.73514 167.37230 311.49512
$M3
  [1] 316.37916 238.75643 277.44513 142.00038 242.58559 285.64139  61.01016
  [8] 353.16336 150.75096 300.15989 298.99994  74.33973
$P3
[1] 140.9876 207.7029
$P4
[1] 316.71972 120.76090  85.56545 135.87049 290.98684 160.52683

 > TO_POS_Smc.median
$M1
[1]  6.411332 31.347971  5.649655  8.954671  8.279096 10.385299
$M2
  [1]  9.358691 18.657771  3.033461 11.193338 10.385299 11.233078  2.417496
  [8] 10.021019 10.100497 19.796975 19.459188
$M3
  [1] 27.691922 13.895635 26.824272 17.909342 19.128024 21.730973  6.206010
  [8] 24.214702 11.531125 13.617458 19.717496  9.305704
$P3
[1]  9.669985 18.392840
$P4
[1] 18.346478 10.504518  8.967917  4.291884 23.380168  9.014280


Thanks in advance
Ivan


Le 2/3/2010 10:22, Ivan Calandra a écrit :
> Hi!
>
> Looks like get() doesn't work. Here is what I do and what I get (still 
> in the loop):
>
>>  names(get(paste(names(file)[3], name.num, sep="_")))<- 
>> levels(factor(file[[3]]))
> Error in names(get(paste(names(file)[3], name.num, sep = "_")))<- 
> levels(factor(file[[3]])) :
> could not find function "get<-"
>
>>  print(names(get(paste(names(file)[3], name.num, sep="_"))))  #4 
>> iterations; I wanted to test this part
> NULL
> NULL
> NULL
> NULL
>
>
> Does anyone has an idea about it?
> Thanks
> Ivan
>
> Le 2/2/2010 19:38, Chris Campbell a écrit :
>> On Tue, Feb 2, 2010 at 11:44, Ivan Calandra
>> <ivan.calandra at uni-hamburg.de>  wrote:
>>> Hi David,
>>>
>>> Thanks for your answer.
>>> But I don't really see how I can extend it with my real data.
>>> The thing is that I have more than 3 names and 1 value for each name.
>>> Moreover, each is different from one run to another. That is why I was
>>> trying with a modification of names(). Also to be noted is that I 
>>> simplified
>>> the "name" in assign(); I actually have 2 other variables that will be
>>> pasted to create the name.
>>>
>>> Here is my code (I kept only what is important for that part):
>>> ----
>>> library(WRS)
>>> seq.num<- seq(7,10,1)        #column (variable) indexes to be used as
>>> numerical variables
>>>
>>> # fac2list() separates the data from file[,k] into groups from 
>>> levels in
>>> file[3] and store into list mode.
>>> for(i in 1:length(seq.num)) {
>>>   k<- seq.num[i]
>>>   name.num<- names(file)[k]
>>>   assign(paste(names(file)[3], name.num, sep="_"), fac2list(file[,k],
>>> file[3]))
>>>   names(paste(names(file)[3], name.num, sep="_"))<-
>>> levels(factor(file[[3]]))  #that line doesn't work, but I would like
>>> something in this direction
>>> }
>>> ----
>> Sounds like a job for 'get'.  Try this (untested):
>>
>> names(get(paste(names(file)[3], name.num, sep="_")))
>>
>> Good luck
>>
>>> Thanks in advance for your help.
>>> Regards,
>>> Ivan
>>>
>>>
>>>
>>> Le 2/1/2010 18:47, David Winsemius a écrit :
>>>> On Feb 1, 2010, at 12:33 PM, Ivan Calandra wrote:
>>>>
>>>>> I have a follow-up question:
>>>>>
>>>>> I use assign() to store some value in my paste()-created object as
>>>>> suggested:
>>>>> for (i in 1:3) {
>>>>> assign(paste("object", i, sep=""), c("a", "b", "c"))
>>>>> }
>>>>>
>>>>> Then I would like to change the names of the elements of that object
>>>>> within the loop. Since it is all in a loop, I cannot give the name 
>>>>> of the
>>>>> object manually by doing something like: names(object1)<- c("tooth",
>>>>> "bone", "species").
>>>>> The only thing I can give to names() is paste("object", i, 
>>>>> sep=""), which
>>>>> doesn't work.
>>>>>
>>>>> Any idea of how to do it?
>>>>> for (i in paste("object", 1:3, sep="")) {
>>>> + assign(i, c("tooth"="a", "bone"="b", "species"="c") )
>>>> + }
>>>>> object1
>>>>   tooth    bone species
>>>>     "a"     "b"     "c"
>>>>
>>>>> Thanks in advance
>>>>> Ivan
>>>>>
>>>>>
>>>>> Le 2/1/2010 17:14, David Winsemius a écrit :
>>>>>> Upon reading it yesterday, it appeared as it would have required 
>>>>>> some
>>>>>> serious testing and there was no data on which to do any work.  
>>>>>> You were
>>>>>> clearly not taking the time to isolate the problem and construct 
>>>>>> a dataset.
>>>>>> But who knows? When you say "What I want to do is. ... ,I would 
>>>>>> like the
>>>>>> name of the list to be created in the loop too", maybe all you 
>>>>>> needed was to
>>>>>> be pointed to was:
>>>>>>
>>>>>> ?assign
>>>>>>
>>>>>> But if that were the case, then you lost most of your audience 
>>>>>> along the
>>>>>> way with a bunch of unneeded and obscure code.
>>>>>>
>>>> David Winsemius, MD
>>>> Heritage Laboratories
>>>> West Hartford, CT
>>>>
>>>>
>>> ______________________________________________
>>> 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.
>>>
>

-- 
Ivan CALANDRA
PhD Student
University of Hamburg
Biozentrum Grindel und Zoologisches Institut und Museum
Martin-Luther-King-Platz 3
D-20146 Hamburg, GERMANY
+49(0)40 42838 6231
ivan.calandra at uni-hamburg.de

**********
http://www.for771.uni-bonn.de
http://webapp5.rrz.uni-hamburg.de/mammals/eng/mitarbeiter.php

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: test_data.txt
URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20100203/8e03373c/attachment.txt>


More information about the R-help mailing list