Код R: как использовать функцию «назначить» внутри al oop, чтобы установить атрибуты для n объектов - PullRequest
1 голос
/ 12 февраля 2020

У меня проблемы с установкой атрибутов для n объектов, полученных из списка, попытка чего-то подобного приводит к ошибке:

N = 3 # или к любому числу, которое у меня есть в списке интересов.

for (i in 1:N){

assign(paste0("obj",i),unlist(list[i],recursive=F,use.names=T))     #works great

attr(paste0("obj",i),'ID') <-'name'                                 #this is the issue 

}

выдает ошибку «цель назначения расширяется до неязыкового объекта»

Я пытался решить эту проблему, используя что-то вроде этого:

tmp<-paste0("obj",i)
parse(file="", text=tmp)$'ID'<-'name'

и несколько вариантов без успеха. Я даже попробовал функцию 'setattr' из пакета 'Bit'. Кто-нибудь знает, как мне это решить?

1 Ответ

0 голосов
/ 12 февраля 2020

Просто назначьте атрибут первым:

mylist <- list(1:3, letters, rnorm(5))

for (i in seq_along(mylist))
{
  new_object <- unlist(mylist[i], recursive = FALSE, use.names = TRUE)
  attr(new_object, "ID") <- "name"
  assign(paste0("obj", i), new_object)
}

obj1
#> [1] 1 2 3
#> attr(,"ID")
#> [1] "name"
obj2
#>  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
#> [20] "t" "u" "v" "w" "x" "y" "z"
#> attr(,"ID")
#> [1] "name"
obj3
#> [1] -1.296529567  0.932548362 -0.935856164  0.002168237  0.024290270
#> attr(,"ID")
#> [1] "name"
...