[string] 문자열을 변수 이름으로 변환

R을 사용하여 다음 형식의 문자열 목록을 구문 분석합니다.

original_string <- "variable_name=variable_value"

먼저 원래 문자열에서 변수 이름과 값을 추출하고 값을 숫자 클래스로 변환합니다.

parameter_value <- as.numeric("variable_value")
parameter_name <- "variable_name"

그런 다음 parameter_name 문자열과 같은 이름의 변수에 값을 할당하고 싶습니다.

variable_name <- parameter_value

이를 수행하는 기능은 무엇입니까?



답변

할당은 당신이 찾고있는 것입니다.

assign("x", 5)

x
[1] 5

그러나 구매자는 조심하십시오.

R FAQ 7.21 http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a-variable_003f 참조


답변

do.call을 사용할 수 있습니다.

 do.call("<-",list(parameter_name, parameter_value))


답변

거기에 또 다른 간단한 해결책이 있습니다.
http://www.r-bloggers.com/converting-a-string-to-a-variable-name-on-the-fly-and-vice-versa-in-r/

문자열을 변수로 변환하려면 :

x <- 42
eval(parse(text = "x"))
[1] 42

그리고 그 반대 :

x <- 42
deparse(substitute(x))
[1] "x"


답변

사용 x=as.name("string")
하면 x이름 문자열로 변수를 참조 하는 데 사용할 수 있습니다 .

귀하의 질문에 올바르게 대답하는지 모르겠습니다.


답변

찾고있는 기능은 get()다음과 같습니다.

assign ("abc",5)
get("abc")

메모리 주소가 동일한 지 확인 :

getabc <- get("abc")
pryr::address(abc) == pryr::address(getabc)
# [1] TRUE

참조 : R FAQ 7.21 문자열을 변수로 바꾸려면 어떻게해야합니까?


답변

strsplit입력을 구문 분석하고 Greg가 언급했듯이 assign변수를 할당합니다.

original_string <- c("x=123", "y=456")
pairs <- strsplit(original_string, "=")
lapply(pairs, function(x) assign(x[1], as.numeric(x[2]), envir = globalenv()))
ls()


답변

assign좋지만 자동화 스크립트에서 만든 변수를 다시 참조하는 기능을 찾지 못했습니다. (as.name 반대 방식으로 작동하는 것 같습니다). 경험이 많은 코더는 의심 할 여지없이 더 나은 솔루션을 가질 수 있지만,이 솔루션은 작동하며 R이 자체적으로 실행할 코드를 작성하게된다는 점에서 약간 유머러스합니다.

방금 값 5를 x( var.name <- "x"; assign(var.name, 5))에 할당 했고 값을 6으로 변경하고 싶다고 가정 해 보겠습니다. 스크립트를 작성 중이고 변수 이름 ( var.name)이 무엇인지 미리 알지 못하는 경우 ( assign기능), 나는 단순히 넣을 수 없습니다 x <- 6때문에 var.name되었을 수 있습니다 "y". 그래서 나는 :

var.name <- "x"
#some other code...
assign(var.name, 5)
#some more code...

#write a script file (1 line in this case) that works with whatever variable name
write(paste0(var.name, " <- 6"), "tmp.R")
#source that script file
source("tmp.R")
#remove the script file for tidiness
file.remove("tmp.R")

x6으로 변경되고 변수 이름이.이 아닌 "x"경우 해당 변수는 유사하게 6으로 변경됩니다.