즉석에서 새 변수 이름을 만들 수 있습니까?
목록의 데이터 프레임을 끝에 숫자가있는 새 변수로 읽고 싶습니다. orca1, orca2, orca3 …
내가 뭔가를 시도하면
paste("orca",i,sep="")=list_name[[i]]
이 오류가 발생합니다.
target of assignment expands to non-language object
이것에 대한 다른 방법이 있습니까?
답변
사용 assign
:
assign(paste("orca", i, sep = ""), list_name[[i]])
답변
그것은 당신이 목록이 더 나을 것이 아니라 사용하고있는 나에게 것 orca1
, orca2
등 … 그때는 것 orca[1]
, orca[2]
…
일반적으로 숫자로만 구분되는 변수 목록을 만듭니다. 그 숫자는 나중에 쉽게 액세스 할 수있는 방법이기 때문입니다.
orca <- list()
orca[1] <- "Hi"
orca[2] <- 59
그렇지 않으면 assign
당신이 원하는 것입니다.
답변
데이터 프레임을 만들지 마십시오. 목록을 유지하고 요소의 이름을 지정하되 첨부하지 마십시오.
가장 큰 이유는 이동 중에 변수를 만들면 거의 항상 나중에 유용한 작업을 수행하기 위해 각 변수를 반복해야하기 때문입니다. 거기에서 당신은 즉석에서 생성 한 각각의 이름을 반복해야합니다.
목록의 요소에 이름을 지정하고 이름을 반복하는 것이 훨씬 쉽습니다.
어 태치에 관한 한, R에서의 정말 나쁜 프로그래밍 관행이며 조심하지 않으면 많은 문제를 일으킬 수 있습니다.
답변
당신이 가지고 있다면
varname <- c("a", "b", "d")
넌 할 수있어
get(varname[1]) + 2
…에 대한
a + 2
또는
assign(varname[1], 2 + 2)
…에 대한
a <- 2 + 2
따라서 변수 (예 : 연결)를 사용하는 수식을 평가하려는 경우 GET을 사용하고 미리 선언 된 변수에 값을 할당하려는 경우 ASSIGN을 사용하는 것처럼 보입니다.
assign 구문 :
assign (x, value)
x : 문자열로 주어진 변수 이름. 강제 변환이 수행되지 않으며 길이가 1보다 큰 문자형 벡터의 첫 번째 요소가 경고와 함께 사용됩니다.
value : x에 할당 할 값.
답변
또 다른 까다로운 해결책은 목록의 요소에 이름을 지정 attach
하는 것입니다.
list_name = list(
head(iris),
head(swiss),
head(airquality)
)
names(list_name) <- paste("orca", seq_along(list_name), sep="")
attach(list_name)
orca1
# 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
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
답변
그리고이 옵션은?
list_name<-list()
for(i in 1:100){
paste("orca",i,sep="")->list_name[[i]]
}
완벽하게 작동합니다. 입력 한 예에서 첫 번째 줄이 누락 된 다음 오류 메시지가 표시됩니다.