Saya menggunakan R untuk mengurai daftar string dalam bentuk:
original_string <- "variable_name=variable_value"
Pertama, saya mengekstrak nama variabel dan nilai dari string asli dan mengonversi nilainya ke kelas numerik.
parameter_value <- as.numeric("variable_value")
parameter_name <- "variable_name"
Kemudian, saya ingin menetapkan nilai ke variabel dengan nama yang sama dengan string parameter_name.
variable_name <- parameter_value
Apa fungsi untuk melakukan ini?
Anda dapat menggunakan do.call:
sumber
<-
adalah fungsi itu sendiri.Ada solusi sederhana lain yang ditemukan di sana: http://www.r-bloggers.com/converting-a-string-to-a-variable-name-on-the-fly-and-vice-versa-in-r/
Untuk mengonversi string menjadi variabel:
Dan sebaliknya:
sumber
gunakan
x=as.name("string")
yang bisa Anda gunakan kemudian gunakanx
untuk merujuk ke variabel dengan string nama.Saya tidak tahu apakah itu menjawab pertanyaan Anda dengan benar
sumber
x=as.symbol("string")
Fungsi yang Anda cari adalah
get()
:Memastikan bahwa alamat memori identik:
Referensi: R FAQ 7.21 Bagaimana cara mengubah string menjadi variabel?
sumber
x <- 42; deparse(substitute(x))
strsplit
untuk mengurai masukan Anda dan, seperti yang disebutkan Greg,assign
untuk menetapkan variabel.sumber
assign
bagus, tetapi saya belum menemukan fungsi untuk merujuk kembali ke variabel yang Anda buat dalam skrip otomatis. (as.name
sepertinya bekerja sebaliknya). Pembuat kode yang lebih berpengalaman pasti akan memiliki solusi yang lebih baik, tetapi solusi ini berfungsi dan mungkin sedikit lucu, karena ia membuat R menulis kode untuk dieksekusi sendiri.Katakanlah saya baru saja menetapkan nilai 5 ke
x
(var.name <- "x"; assign(var.name, 5)
) dan saya ingin mengubah nilainya menjadi 6. Jika saya menulis skrip dan tidak tahu sebelumnya apa nama variabel (var.name
) nantinya (yang tampaknya menjadi inti dariassign
fungsi), saya tidak bisa begitu sajax <- 6
karenavar.name
mungkin saja"y"
. Jadi saya lakukan:x
akan diubah menjadi 6, dan jika nama variabel adalah selain dari"x"
, variabel itu juga akan diubah menjadi 6.sumber
Saya bekerja dengan ini beberapa hari yang lalu, dan memperhatikan bahwa terkadang Anda perlu menggunakan
get()
fungsi untuk mencetak hasil variabel Anda. yaitu:Dari sana, jika Anda mencoba mencetak variabel
varnames[1]
, ia mengembalikan 'jan'. Untuk menyiasatinya, Anda perlu melakukannyaprint(get(varnames[1]))
sumber
Mungkin saya tidak mengerti masalah Anda dengan benar, karena kesederhanaan teladan Anda. Menurut pemahaman saya, Anda memiliki serangkaian instruksi yang disimpan dalam vektor karakter, dan instruksi tersebut sangat dekat dengan format yang benar, kecuali Anda ingin memasukkan anggota yang tepat ke numerik.
Jika pemahaman saya benar, saya ingin mengusulkan pendekatan yang sedikit berbeda, yang tidak bergantung pada pemisahan string asli Anda, tetapi langsung mengevaluasi instruksi Anda (dengan sedikit perbaikan).
Pada dasarnya, yang kami lakukan adalah kami 'meningkatkan' instruksi Anda
variable_name="10"
sehingga menjadivariable_name="10" %>% as.numeric
, yang setaravariable_name=as.numeric("10")
denganmagrittr
sintaks pipa-aliran. Kemudian kami mengevaluasi ungkapan ini dalam lingkungan saat ini.Harapan itu membantu seseorang yang berkeliaran di sini 8 tahun kemudian ;-)
sumber
Jika Anda ingin mengonversi string menjadi variabel di dalam tubuh fungsi, tetapi Anda ingin memiliki variabel global:
sumber