É possível criar novos nomes de variáveis em tempo real?
Eu gostaria de ler os quadros de dados de uma lista em novas variáveis com números no final. Algo como orca1, orca2, orca3 ...
Se eu tentar algo como
paste("orca",i,sep="")=list_name[[i]]
Eu recebo este erro
target of assignment expands to non-language object
Existe outra maneira de contornar isso?
Respostas:
Use
assign
:fonte
paste0
?Parece-me que você pode ser melhor fora com uma lista ao invés de usar
orca1
,orca2
etc, ... então seriaorca[1]
,orca[2]
...Normalmente, você está fazendo uma lista de variáveis diferenciadas por nada além de um número, porque esse número seria uma maneira conveniente de acessá-las posteriormente.
Caso contrário,
assign
é exatamente o que você deseja.fonte
Não faça frames de dados. Guarde a lista, nomeie seus elementos, mas não a anexe.
A maior razão para isso é que se você criar variáveis em movimento, quase sempre você terá que iterar mais tarde por cada uma delas para realizar algo útil. Lá você será novamente forçado a iterar em cada um dos nomes que criou instantaneamente.
É muito mais fácil nomear os elementos da lista e iterar por meio dos nomes.
No que diz respeito ao attach, é uma prática de programação muito ruim em R e pode levar a muitos problemas se você não for cuidadoso.
fonte
FAQ diz:
Se você tem
você pode fazer
para
ou
para
Portanto, parece que você usa GET quando deseja avaliar uma fórmula que usa uma variável (como uma concatenação) e ASSIGN quando deseja atribuir um valor a uma variável pré-declarada.
Sintaxe para atribuir: atribuir (x, valor)
x: um nome de variável, fornecido como uma string de caracteres. Nenhuma coerção é feita, e o primeiro elemento de um vetor de caracteres de comprimento maior que um será usado, com um aviso.
valor: valor a ser atribuído a x.
fonte
Outra solução complicada é nomear os elementos da lista e
attach
:fonte
attach
você geralmente está fazendo a pergunta errada ...E essa opção?
Funciona perfeitamente. No exemplo que você colocou, a primeira linha está faltando e, em seguida, apresenta a mensagem de erro.
fonte