从列表中调用对象

时间:2017-03-26 19:13:13

标签: r

我在从for循环中创建的变量调用列表中的对象时遇到了一些麻烦。

source: new ol.source.Vector({ features: new ol.Collection(new ol.format.GeoJSON()).readFeatures(map_info['layers'][1])) })

我的问题在于我的for循环的第二部分。我试图在我的第二个变量的计算中使用我的第一个创建变量的输出中的第三个对象。如果我使用for (i in 1:10) { #create variables and run through function varName<-paste("var",i,sep="") assign(varName, rnmf(data, k=i, showprogress=FALSE)) #create new variable using object 3 from varName output varNF<-paste("varNF",i,sep="") assign(varNF, (data-varName[[3]])^2) } ,我会获得varName[[3]],如果我使用"subscript out of bounds",则会获得varName$fit

看起来我的第二部分中的varName没有调用我正在创建的递增varName(var1,var2,var3等等),但它调用的是实际变量varName。为了尝试解决这个问题,我尝试了

"$ operator is invalid for atomic vectors"

这给了我错误assign(varNF, (data-get(paste("var",i,"[[3]]",sep="")))^2) 。但是,如果我只是在我的R控制台中调用var1 [[3]],它确实存在。我不太确定从哪里开始。任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

R中一个非常有用的经验法则是:

如果您发现自己在代码中使用assign()get(),则表明您正在使用错误的工具来解决问题。如果您仍然认为应该使用这些功能,请再想一想。您缺少的工具很可能是R列表和列表的子集。

(告诉大家你知道上面的内容)

在你的情况下,我会做类似的事情:

library("rNMF")
[...]

var <- list()
varNF <- list()
for (i in 1:10) {
    res <- rnmf(data, k = i, showprogress = FALSE)
    var[[i]] <- res
    varNF[[i]] <- (data - res$fit)^2
}