Thanks so much, Michael!

head(first)
  probe_name chr_id position array1
1    C-7SARK      1   849467     10
2    C-4WYLN      1   854278     10
3    C-3BFNY      1   854471     10
4    C-7ONNE      1   874460     10
5    C-6HYCN      1   874571     10
6    C-7SCGC      1   874609     10

for( i in 2:3) {
+     label <- paste("array", i, sep="")
+     assign(label, value = result.fun[[i-1]] )
+     first <- cbind(first, get(label))
+ }

 head(first)
  probe_name chr_id position array1 get(label) get(label)
1    C-7SARK      1   849467     10         10         10
2    C-4WYLN      1   854278     10         10         10
3    C-3BFNY      1   854471     10         10         10
4    C-7ONNE      1   874460     10         10         10
5    C-6HYCN      1   874571     10         10         10
6    C-7SCGC      1   874609     10         10         10

**I can use the codes to change the columns names.
colnames(first.out) <- c(colnames(first), paste("array",
seq(length(result.fun)), sep=""))


I am running:
> first.out <- do.call("cbind", list(first, result.fun))

and

> first.out <- cbind(first, result.fun)

IT has been 10 mins, and I will let you know the results.

Thanks so much for the great helps!





On Thu, Sep 22, 2011 at 10:37 AM, R. Michael Weylandt <
michael.weylandt@gmail.com> wrote:

> There are a few ways to proceed from here. If you are really committed to
> this loop + assign idea, I'd provide the following code:
>
> for( i in 2:3) {
>     label <- paste("array", i, sep="")
>     assign(label, value = result.fun[[i-1]] )
>     first <- cbind(first, get(label))
> }
>
> However, this is generally pretty inefficient. Why not something more like
> the following?
>
> first.out <- do.call("cbind", list(first, result.fun))
>
> If you need the names to be "arrayi" you can add this line:
> colnames(first.out) <- c(colnames(first), paste("array",
> seq(length(result.fun)), sep=""))
>
> I'm unable to test this on your (unprovided) data, but here's an example of
> how this works:
>
> first = data.frame(x = 1:3, y = 6:8, z = 11:13)
>
> a = data.frame(a = 1:3)
> b = data.frame(b = 4:6)
> result.fun = list(a,b)
>
> first.out <- do.call("cbind", list(first, result.fun))
> print(first.out)
>
> which provides this output.
>
>     x y  z a b
> 1 1 6 11 1 4
> 2 2 7 12 2 5
> 3 3 8 13 3 6
>
> More generally, you really should read about how arguments and assignments
> work in R. See, e.g., 8.2.26 in the R inferno.
>
> Michael Weylandt
>
>
> On Thu, Sep 22, 2011 at 1:21 PM, Changbin Du <changbind@gmail.com> wrote:
>
>> HI, Michael,
>>
>> I tried use x and got the following:
>>
>> > for (i in 2:3) {
>> +
>> + assign(x=paste("array", i, sep=""), value=result.fun[[i-1]])
>> +
>> + first <-cbind(first, x)
>> +
>> + }
>> *Error in cbind(first, x) : object 'x' not found
>> *
>>
>> But I checked the
>>  ls()
>>      "array2"       "array3"    were created.
>>
>> Can I put them into the first data set by loop, or manually?
>>
>> Thanks!
>>
>>
>> P.S   I search the similar codes from google and can not work as I
>> expected.
>>
>> Thanks!
>>
>>
>>
>> On Thu, Sep 22, 2011 at 10:11 AM, R. Michael Weylandt <
>> michael.weylandt@gmail.com> wrote:
>>
>>> There is no "lab=" argument for assign() hence the error. Did someone
>>> provide you with example code that suggested such a thing? remove lab=
>>> entirely or replace it with x= to make your code work. More generally type
>>> ?assign or args(assign) to see what the arguments for a function are.
>>>
>>> More generally, this sort of thing may be best handled in a list rather
>>> than an set of independent variables.
>>>
>>> Michael Weylandt
>>>
>>> On Thu, Sep 22, 2011 at 1:07 PM, Changbin Du <changbind@gmail.com>wrote:
>>>
>>>> HI, Dear R community,
>>>>
>>>> I am trying to created new variables and put into a data frame through a
>>>> loop.
>>>>
>>>> My original data set:
>>>>
>>>> head(first)
>>>>  probe_name chr_id position array1
>>>> 1    C-7SARK      1   849467     10
>>>> 2    C-4WYLN      1   854278     10
>>>> 3    C-3BFNY      1   854471     10
>>>> 4    C-7ONNE      1   874460     10
>>>> 5    C-6HYCN      1   874571     10
>>>> 6    C-7SCGC      1   874609     10
>>>>
>>>>
>>>> I have 48 other array data from a list result.fun
>>>> array2=result.fun[[1]]
>>>> array3=result.fun[[2]]
>>>> .
>>>> .
>>>>
>>>> I want the following results:
>>>>
>>>>  probe_name chr_id position array1 array2 array3
>>>> 1    C-7SARK      1   849467     10     10       10
>>>> 2    C-4WYLN      1   854278     10     10       10
>>>> 3    C-3BFNY      1   854471     10      10       10
>>>> 4    C-7ONNE      1   874460     10     10       10
>>>> 5    C-6HYCN      1   874571     10     10       10
>>>> 6    C-7SCGC      1   874609     10     10       10
>>>>
>>>>
>>>> I used the following codes:
>>>>
>>>> for (i in 2:3) {
>>>>
>>>> assign(lab=paste("array", i, sep=""), value=result.fun[[i-1]])
>>>>
>>>> first <-cbind(first, lab)
>>>>
>>>> }
>>>>
>>>> *Error in assign(lab = paste("array", i, sep = ""), value =
>>>> result.fun[[i -
>>>> :
>>>>  unused argument(s) (lab = paste("array", i, sep = ""))*
>>>>
>>>>
>>>> Can anyone give some hits or helps?
>>>>
>>>> Thanks so much!
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Sincerely,
>>>> Changbin
>>>> --
>>>>
>>>>        [[alternative HTML version deleted]]
>>>>
>>>> ______________________________________________
>>>> R-help@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.
>>>>
>>>
>>>
>>
>>
>> --
>> Sincerely,
>> Changbin
>> --
>>
>>
>


-- 
Sincerely,
Changbin
--

Changbin Du
Data Analysis Group, Affymetrix Inc
6550 Emeryville, CA, 94608

	[[alternative HTML version deleted]]

