使用编码中保存在变量中的字符串

时间:2016-06-29 10:41:29

标签: r string parsing paste assign

我想知道如何使用存储在变量/矢量/矩阵等中的叮咬

在编码过程中编辑变量/向量或函数的名称

e.g。

而不是创建以下

v_name1<- rep(5,10)
v_name2<- rep(30,10)
.
.
. 


function_name1<- { ... }
function_name2<-{ ... } 

.
.
. 

使用for循环

我已经知道了,例如(这只是一个例子来说明)

  s<-c("name1","name2", ... )

for (i in 1:(length(s))) {
    eval(parse(text=paste("v_",s[1],"<-c(rep(i,10))", sep="")))
    }
        v_name1
         [1] 1 1 1 1 1 1 1 1 1 1

我有两个问题:

1)你如何为功能做这个,我得到以下错误?例如

st<- "(x,y)<-{ 3*x + y}"
eval(parse(text=paste("function_",s[1],st, sep="")))

> eval(parse(text=paste("function_",s[1],st, sep="")))
Error in eval(expr, envir, enclos) : object 'x' not found

2)有没有更快/更聪明的方法来做到这一点(用保存在另一个对象中的字符串替换部分编码)?

我不想分享我的最终目标或为什么需要这样做,我只是想知道上述两件事是否合情合理。

1 个答案:

答案 0 :(得分:2)

第一条评论告诉您使用列表。您可以将任何内容放入列表,数据和函数中:

set.seed(42)
v <- list(uk = rnorm(10, mean = 5), us = rnorm(10, mean = 30), fr = rnorm(10, mean = 300))
funs <- list(uk = mean, us = median, fr = min)

然后你可以这样做:

country <- "us"
funs[[country]](v[[country]])

R不是带有宏的语言。使用语言而不是其设计。忘了eval(parse())