[R] Assign a list to one column of data frame
Bert Gunter
bgunter.4567 at gmail.com
Sun Dec 11 12:03:45 CET 2016
?data.frame says:
"If a list or data frame or matrix is passed to data.frame it is as if
each component or column had been passed as a separate argument
(except for matrices of class "model.matrix" and those protected by
I). "
So doing what Help says to do seems to do what you asked:
> df <- data.frame(a=1:3,b=letters[1:3])
> df
a b
1 1 a
2 2 b
3 3 c
## add a list column, protected by "I()"
> df$new <- I(list(1:5,g = "foo", abb = matrix(runif(6),nr=3)))
## works as advertised
> df
a b new
1 1 a 1, 2, 3,....
2 2 b foo
3 3 c 0.080349....
> df$new
[[1]]
[1] 1 2 3 4 5
$g
[1] "foo"
$abb
[,1] [,2]
[1,] 0.08034915 0.83671591
[2,] 0.43938440 0.06067429
[3,] 0.88196881 0.33461234
Cheers,
Bert
Bert Gunter
"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Sat, Dec 10, 2016 at 7:18 PM, Marlin JL.M <marlin- at gmx.cn> wrote:
> Dear all,
>
> I want to assign a list to one column of data.frame where the name of the column
> is a variable. I tried the following:
>
> Using R version 3.3.2
>
>> df <- iris[1:3, ]
>> df
> # Sepal.Length Sepal.Width Petal.Length Petal.Width Species
> # 1 5.1 3.5 1.4 0.2 setosa
> # 2 4.9 3.0 1.4 0.2 setosa
> # 3 4.7 3.2 1.3 0.2 setosa
>
>> mylist <- list(c(1,2,3),c(1),c())
>> mylist
> # [[1]]
> # [1] 1 2 3
> #
> # [[2]]
> # [1] 1
> #
> # [[3]]
> # NULL
>
>> n1 <- 'new1'
>> df$n1 <- mylist
>
>> n2 <- 'new2'
>> df[,n2] <- mylist
> # Warning message:
> # In `[<-.data.frame`(`*tmp*`, , "new4", value = list(c(1, 2, 3), :
> # provided 3 variables to replace 1 variables
>
>> n3 <- 'new3'
>> df[,n3] <- I(mylist)
> # Warning message:
> # In `[<-.data.frame`(`*tmp*`, , "new3", value = list(c(1, 2, 3), :
> # provided 3 variables to replace 1 variables
>
>> eval(parse(text = paste0("df$","new4","<- mylist")))
>
>> df
> # Sepal.Length Sepal.Width Petal.Length Petal.Width Species n1 new2 new3 new4
> # 1 5.1 3.5 1.4 0.2 setosa 1, 2, 3 1 1 1, 2, 3
> # 2 4.9 3.0 1.4 0.2 setosa 1 2 2 1
> # 3 4.7 3.2 1.3 0.2 setosa NULL 3 3 NULL
>
>
> The "eval" works correctly, however, if I want to avoid using "eval", what
> should I do?
>
> Thanks!
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
More information about the R-help
mailing list