在R中,如何读取变量';带变量的s值';谁的名字是字符串?

在R中,如何读取变量';带变量的s值';谁的名字是字符串?,r,R,我有一个对象,它以字符串形式包含变量名 例如: OBJECT_containing_variables_name <- "the_variable_I_want_to_read" 这实际上是将我的变量名作为字符串重新调用,如“tablename$colname” 但我想实际读取变量本身。 我该怎么做 我做了一些测试: 我已经尝试了eval和parse函数,如: eval( paste0("tablename$",eval(parse(text="colnames_as_string[

我有一个对象,它以字符串形式包含变量名 例如:

OBJECT_containing_variables_name <- "the_variable_I_want_to_read"
这实际上是将我的变量名作为字符串重新调用,如
“tablename$colname”

但我想实际读取变量本身。 我该怎么做

我做了一些测试:

  • 我已经尝试了eval和parse函数,如:

    eval(  paste0("tablename$",eval(parse(text="colnames_as_string[i]"))) )
    
但它也以字符串形式返回变量的名称

  • 我还尝试:

    eval(parse(text=" paste0("tablename$",eval(parse(text="colnames_as_string[i]")))  "))
    

但它仍然以字符串形式返回变量的名称

太长,无法粘贴为注释,因此请选择答案。如果您使用的是
data.frame
,并且希望检索列,因为列名称存储为vector(
k
),那么可以执行以下操作:

> w <- as.data.frame(mtcars)
> k <- colnames(w)[1:5]
> k
[1] "mpg"  "cyl"  "disp" "hp"   "drat"
> w[, k[1]]
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7
[18] 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
> w$mpg
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7
[18] 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4

可能有用
eval(parse(text=paste0(“tablename$”,eval(parse(text=“colnames\u as\u string[i]”))))
应该可以工作。另请参见这是一个残暴的代码。如果你养成了用
eval(parse())
编写代码的习惯,你迟早会后悔的。我想你应该简单地做
tablename[[colnames\u as\u string[i]]]
@Roland你的代码对我来说非常适合!!是的,这要容易得多。非常感谢您将解决方案作为答案,并将其标记为正确,而不是在标题中添加“#已解决”
> w <- as.data.frame(mtcars)
> k <- colnames(w)[1:5]
> k
[1] "mpg"  "cyl"  "disp" "hp"   "drat"
> w[, k[1]]
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7
[18] 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
> w$mpg
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7
[18] 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
# Testing just one column 
> paste(w[, k[1]], collapse = " ")
[1] "21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26 30.4 15.8 19.7 15 21.4"

# Using sapply to get a vector with all column names in 'k'
> sapply(k, function(z) paste(w[, z], collapse = " "))
                                                                                                                                                        mpg 
  "21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26 30.4 15.8 19.7 15 21.4" 
                                                                                                                                                        cyl 
                                                                                          "6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4" 
                                                                                                                                                       disp 
     "160 160 108 258 360 225 360 146.7 140.8 167.6 167.6 275.8 275.8 275.8 472 460 440 78.7 75.7 71.1 120.1 318 304 350 400 79 120.3 95.1 351 145 301 121" 
                                                                                                                                                         hp 
                                   "110 110 93 110 175 105 245 62 95 123 123 180 180 180 205 215 230 66 52 65 97 150 150 245 175 66 91 113 264 175 335 109" 
                                                                                                                                                       drat 
"3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 3.92 3.07 3.07 3.07 2.93 3 3.23 4.08 4.93 4.22 3.7 2.76 3.15 3.73 3.08 4.08 4.43 3.77 4.22 3.62 3.54 4.11"