回答:
割り当てはあなたが探しているものです。
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
名前の文字列で変数を参照すること。
それがあなたの質問に正しく答えれば私は知りません
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にコードを記述して実行させるという点で、少しユーモラスです。
x
(var.name <- "x"; assign(var.name, 5)
)に値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年後にここをさまよっている人を助けることを願っています;-)
関数の本体内で文字列を変数に変換したいが、変数をグローバルにしたい場合:
test <- function() {
do.call("<<-",list("vartest","xxx"))
}
test()
vartest
[1] "xxx"