如何正确评估文字字符向量
How to correctly evaluate a literal character vector
假设我在 R 中有以下对象:
QXX_my_vector <- "c(\"Element 1\", \"Element 2\", \"Element 3\", \"Element 4\")"
我想把它变成一个包含四个元素的真字符向量。
我可以通过 eval(parse(text = QXX_my_vector))
做到这一点,它给出了:
# [1] "Element 1" "Element 2" "Element 3" "Element 4"
我的problem/question是:我想将文本元素动态传递给解析函数,即:
question_stem = "QXX"
eval(parse(text = paste0(question_stem, "_my_vector")))
然而,这给出了:
# [1] "c(\"Element 1\", \"Element 2\", \"Element 3\", \"Element 3\")"
我也尝试将 paste0
部分包装到 sym
函数中,但这给出了相同的结果。
有什么想法吗?
您必须使用 get
来获取具有给定名称的对象。
eval(parse(text = get(paste0(question_stem, "_my_vector"))))
#[1] "Element 1" "Element 2" "Element 3" "Element 4
我们可以使用str_extract
library(stringr)
str_extract_all(get(paste0(question_stem, "_my_vector")), '(?<=")[^",)]+')[[1]]
[1] "Element 1" "Element 2" "Element 3" "Element 4"
假设我在 R 中有以下对象:
QXX_my_vector <- "c(\"Element 1\", \"Element 2\", \"Element 3\", \"Element 4\")"
我想把它变成一个包含四个元素的真字符向量。
我可以通过 eval(parse(text = QXX_my_vector))
做到这一点,它给出了:
# [1] "Element 1" "Element 2" "Element 3" "Element 4"
我的problem/question是:我想将文本元素动态传递给解析函数,即:
question_stem = "QXX"
eval(parse(text = paste0(question_stem, "_my_vector")))
然而,这给出了:
# [1] "c(\"Element 1\", \"Element 2\", \"Element 3\", \"Element 3\")"
我也尝试将 paste0
部分包装到 sym
函数中,但这给出了相同的结果。
有什么想法吗?
您必须使用 get
来获取具有给定名称的对象。
eval(parse(text = get(paste0(question_stem, "_my_vector"))))
#[1] "Element 1" "Element 2" "Element 3" "Element 4
我们可以使用str_extract
library(stringr)
str_extract_all(get(paste0(question_stem, "_my_vector")), '(?<=")[^",)]+')[[1]]
[1] "Element 1" "Element 2" "Element 3" "Element 4"