【问题标题】:Assignment using get() and paste()使用 get() 和 paste() 赋值
【发布时间】:2016-08-04 21:20:54
【问题描述】:

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

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

然后我必须替换其中的一些,像这样:

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

但我收到以下错误:“get(paste("a", "bis", sep = "."))[1:2]

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

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)

在这种情况下,错误表示: *Error in get(paste(country[j], ".ext", sep = ""))$mx[(24 * i - 24 + 1):(24 * : 找不到函数“get

提前致谢。

【问题讨论】:

  • rawr 有点取笑我,因为这个问题有点让我烦恼。由于过于依赖getassign,你已经把自己画到了一个角落。但是,在这些情况下通常很难提供帮助,因为解决方案有点像是重新设计您的整个方法,这通常超出了单个 SO 问题的范围。
  • @rawr Here 我想是的。

标签: r get variable-assignment paste assign


【解决方案1】:

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

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() 的痛苦,并且还可以将您的数据置于循环/应用的良好结构中。

【讨论】:

  • 太好了,效果很好。所以这类问题的主要思想是使用列表而不是分配,对吧?那么在您看来,分配和获取的最佳用途是什么?
  • @vmgarciag 我会说上述方法几乎总是最好分配。请参阅以下帖子:[stackoverflow.com/questions/17559390/why-is-assign-bad][assign]
  • @vmgarciag 我使用get 有时当我需要在某些时候使用字符串时,可能使用paste 来访问某些对象,通常在自写函数中。这很可能是我的懒惰,可以改造成上述方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 2018-08-27
  • 2010-10-19
  • 1970-01-01
  • 2017-08-24
相关资源
最近更新 更多