将字符串转换为变量名称

Kno*_*one 89 string r

我使用R来解析表单中的字符串列表:

original_string <- "variable_name=variable_value"
Run Code Online (Sandbox Code Playgroud)

首先,我从原始字符串中提取变量名称和值,并将值转换为数字类.

parameter_value <- as.numeric("variable_value")
parameter_name <- "variable_name"
Run Code Online (Sandbox Code Playgroud)

然后,我想将值赋给一个与parameter_name字符串同名的变量.

variable_name <- parameter_value
Run Code Online (Sandbox Code Playgroud)

这样做的功能是什么?

Gre*_*reg 111

分配是你正在寻找的.

assign("x", 5)

x
[1] 5
Run Code Online (Sandbox Code Playgroud)

但买家要小心.

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

  • “买家小心”是一种相当无聊的说法,表示您几乎不应该这样做,因为它几乎从来都不是解决特定问题的好方法。 (2认同)

Woj*_*ala 61

你可以使用do.call:

 do.call("<-",list(parameter_name, parameter_value))
Run Code Online (Sandbox Code Playgroud)

  • +1思考.人们(包括我)通常会忘记`<-`本身就是一个功能. (6认同)

Joh*_*Bee 45

还有另一个简单的解决方案: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
Run Code Online (Sandbox Code Playgroud)

相反的是:

x <- 42
deparse(substitute(x))
[1] "x"
Run Code Online (Sandbox Code Playgroud)


sai*_*eja 16

使用x = as.name("string")你可以使用x然后用名称字符串引用变量.

我不知道它是否正确回答了你的问题

  • `x=as.symbol("string")` (2认同)

小智 16

您正在寻找的功能是get():

assign ("abc",5)
get("abc")
Run Code Online (Sandbox Code Playgroud)

确认内存地址相同:

getabc <- get("abc")
pryr::address(abc) == pryr::address(getabc)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)

参考:R FAQ 7.21如何将字符串转换为变量?

  • 伟大的!这是我找到的最简洁的答案。有没有类似的简洁方法来做相反的事情?就像`x &lt;- 42; 解析(替代(x))` (2认同)

Ric*_*ton 10

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()
Run Code Online (Sandbox Code Playgroud)


CJB*_*CJB 5

assign很好,但我没有找到一个函数来回引你在自动脚本中创建的变量.(as.name似乎以相反的方式工作).更有经验的编码人员无疑会有更好的解决方案,但是这个解决方案可能会起作用并且可能略显幽默,因为它会让R为自己编写执行代码.

假设我刚刚将值5分配给x(var.name <- "x"; assign(var.name, 5))并且我想将值更改为6.如果我正在编写脚本并且事先不知道变量name(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")
Run Code Online (Sandbox Code Playgroud)

x将更改为6,如果变量名称不是"x",则该变量将同样更改为6.