在R中,如何以变量名作为字符串读取变量的值?

时间:2019-09-24 10:02:24

标签: r

我有一个包含变量名称作为字符串的对象 示例:

OBJECT_containing_variables_name <- "the_variable_I_want_to_read"

是否存在可以使用the_variable_I_want_to_read作为字符串来读取OBJECT_containing_variables_name的函数?



实际上,我正在尝试创建一个for循环,并使用

构造了变量的名称。
paste0("tablename$",eval(parse(text= "colnames_as_string[i]")))

这实际上将变量的名称重新调整为"tablename$colname"

这样的字符串

但是我想实际读取变量本身。 我怎样才能做到这一点 ?

我做了一些测试:

  • 我已经尝试过eval和解析功能,例如:

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

但它还会以字符串形式返回变量的名称

  • 我也尝试过:

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

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

1 个答案:

答案 0 :(得分:0)

太长,无法粘贴为评论,因此请提供答案。如果您使用的是data.frame,并且要检索给定的列名,并且该列名存储为矢量(例如,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

在循环中,可以使用apply系列函数来实现:

# 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"