我想知道如何使用存储在变量/矢量/矩阵等中的叮咬
在编码过程中编辑变量/向量或函数的名称
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)有没有更快/更聪明的方法来做到这一点(用保存在另一个对象中的字符串替换部分编码)?
我不想分享我的最终目标或为什么需要这样做,我只是想知道上述两件事是否合情合理。
答案 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())
。