Answers:
分配是您想要的。
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
在那里找到了另一个简单的解决方案: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
来使用名称字符串来引用变量。
我不知道它能否正确回答您的问题
x=as.symbol("string")
您正在寻找的功能是get()
:
assign ("abc",5)
get("abc")
确认内存地址相同:
getabc <- get("abc")
pryr::address(abc) == pryr::address(getabc)
# [1] TRUE
x <- 42; deparse(substitute(x))
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")
x
将被更改为6,并且如果变量名不是"x"
,则该变量将类似地被更改为6。
几天前,我正在使用此get()
函数,并且注意到有时您需要使用该函数来打印变量的结果。即:
varnames = c('jan', 'feb', 'march')
file_names = list_files('path to multiple csv files saved on drive')
assign(varnames[1], read.csv(file_names[1]) # This will assign the variable
从那里,如果您尝试打印变量varnames[1]
,它将返回“ jan”。要解决此问题,您需要做
print(get(varnames[1]))
也许因为您的示例简单,所以我不正确地理解您的问题。据我了解,您有一系列存储在字符向量中的指令,这些指令非常接近正确格式化的格式,只是您希望将正确的成员转换为数字。
如果我的理解是正确的,我想提出一种稍微不同的方法,该方法不依赖于拆分原始字符串,而是直接评估您的指令(有所改进)。
original_string <- "variable_name=\"10\"" # Your original instruction, but with an actual numeric on the right, stored as character.
library(magrittr) # Or library(tidyverse), but it seems a bit overkilled if the point is just to import pipe-stream operator
eval(parse(text=paste(eval(original_string), "%>% as.numeric")))
print(variable_name)
#[1] 10
基本上,我们正在做的是“改进”您的指令variable_name="10"
,使其变为variable_name="10" %>% as.numeric
,这variable_name=as.numeric("10")
与magrittr
管道流语法等效。然后我们在当前环境中评估此表达式。
希望能对8年后在这里闲逛的人有所帮助;-)