for 루프를 사용하여 변수 목록을 생성하고 그 값을 제공하는 간단한 방법이 있는지 궁금합니다.
for(i in 1:3)
{
noquote(paste("a",i,sep=""))=i
}
위의 코드에서, 내가 만들려고 a1
, a2
, a3
, 1, 2, 3. 그러나, R는 오류 메시지를 제공의 값으로하는 할당합니다. 당신의 도움을 주셔서 감사합니다.
답변
찾고 있습니다 assign()
.
for(i in 1:3){
assign(paste("a", i, sep = ""), i)
}
준다
> ls()
[1] "a1" "a2" "a3"
과
> a1
[1] 1
> a2
[1] 2
> a3
[1] 3
최신 정보
나는 루프를 사용하는 것이 (매우 자주) 나쁜 R 코딩 스타일이라는 것에 동의한다 (위의 논의 참조). 사용 list2env()
(그것을 언급에 대한 @mbq 감사는)이 @Han 린 샹의 질문에 또 다른 솔루션입니다 :
x <- as.list(rnorm(10000))
names(x) <- paste("a", 1:length(x), sep = "")
list2env(x , envir = .GlobalEnv)
답변
값이 벡터 인 경우 루프가 필요하지 않습니다.
vals <- rnorm(3)
n <- length(vals)
lhs <- paste("a", 1:n, sep="")
rhs <- paste("vals[",1:n,"]", sep="")
eq <- paste(paste(lhs, rhs, sep="<-"), collapse=";")
eval(parse(text=eq))
부수적으로, 이것이 R을 좋아하는 이유입니다.