使用get()和paste()进行赋值

时间:2016-04-13 16:17:32

标签: r get variable-assignment paste assign

在我的代码中,我必须创建一个分配一些值的对象,如下所示:

assign(paste("a","bis",sep="."),rep(NA,5))

然后我必须更换其中的一些,例如:

get(paste("a","bis",sep="."))[1:2] <- 7:8

但是我收到以下错误:“get中的错误(粘贴(”a“,”bis“,sep =”。“))[1:2]&lt; - 7:8:赋值目标扩展为非 - 语言对象“。

当然上面的代码是真实代码的简化版本。我要做的是建立一个循环,允许我在数据框中替换一些计算的结果。像这样的东西

assign(paste(country[j],"ext",sep="."),
       data.frame(Year=rep(unique(get(country[j])$Year),each=24),
       Age=rep(c(0,1,seq(5,110,5)),length(unique(get(country[j])$Year))),
       mx=NA,qx=NA,lx=NA,Lx=NA,Tx=NA,ex=NA))

get(paste(country[j],".ext",sep=""))$mx[(24*i-24+1):(24*i)] <- 
    c(subset(get(country[j]),Age<=70 & Year==year)$mx,mx.ext)

在这种情况下,错误表明:* get中的错误(粘贴(country [j],“。ext”,sep =“”))$ mx [(24 * i - 24 + 1):( 24 *:找不到功能“get&lt; - ”*

提前致谢。

1 个答案:

答案 0 :(得分:2)

最好将这些项目保存在列表中。

myList <- list()
myList[[paste("a","bis",sep=".")]] <- rep(NA,5))

myList[[paste(country[j],"ext",sep=".")]] <- data.frame(Year=rep(unique(get(country[j])$Year),each=24),
                           Age=rep(c(0,1,seq(5,110,5)),length(unique(get(country[j])$Year))),
                           mx=NA,qx=NA,lx=NA,Lx=NA,Tx=NA,ex=NA))

这可以让您免于get()assign()的痛苦,并且还可以将您的数据放在漂亮的结构中以进行循环/应用。