[r] 즉시 변수 이름을 지정하는 방법은 무엇입니까?

즉석에서 새 변수 이름을 만들 수 있습니까?

목록의 데이터 프레임을 끝에 숫자가있는 새 변수로 읽고 싶습니다. 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에서의 정말 나쁜 프로그래밍 관행이며 조심하지 않으면 많은 문제를 일으킬 수 있습니다.


답변

FAQ 내용 :

당신이 가지고 있다면

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]]
}

완벽하게 작동합니다. 입력 한 예에서 첫 번째 줄이 누락 된 다음 오류 메시지가 표시됩니다.


답변