【问题标题】:How to access data saved in an assign construct?如何访问保存在分配构造中的数据?
【发布时间】:2014-12-03 01:43:10
【问题描述】:

我创建了一个列表,将列表读入 for 循环,用它进行一些计算并将修改后的数据框导出到 [1] "IAEA_C2_NoStdConditionResiduals1" [2] "IAEA_C2_EAstdResiduals2" 等。当我在 for 循环之后执行 View(IAEA_C2_NoStdConditionResiduals1) 时,我在控制台中收到以下错误消息:Error in print(IAEA_C2_NoStdConditionResiduals1) : object 'IAEA_C2_NoStdConditionResiduals1' not found,但我知道它在那里,因为 RStudio 在其环境视图中告诉我。所以问题是:如何访问保存的数据(在这个分配结构中)以供进一步使用?

ResidualList = list(IAEA_C2_NoStdCondition = IAEA_C2_NoStdCondition,
                IAEA_C2_EAstd = IAEA_C2_EAstd,
                IAEA_C2_STstd = IAEA_C2_STstd,
                IAEA_C2_Bothstd = IAEA_C2_Bothstd,
                TIRI_I_NoStdCondition = TIRI_I_NoStdCondition,
                TIRI_I_EAstd = TIRI_I_EAstd,
                TIRI_I_STstd = TIRI_I_STstd,
                TIRI_I_Bothstd = TIRI_I_Bothstd
                )          

C = 8

for(j in 1:C) {

#convert list Variable to string for later usage as Variable Name as unique identifier!!    

SubNameString = names(ResidualList)[j]
SubNameString = paste0(SubNameString, "Residuals")

#print(SubNameString)
LoopVar = ResidualList[[j]]



LoopVar[ ,"F_corrected_normed"] = round(LoopVar[ ,"F_corrected_normed"] / mean(LoopVar[   ,"F_corrected_normed"]),
                                            digit = 5
                                            )

LoopVar[ ,"F_corrected_normed_error"] = round(LoopVar[ ,"F_corrected_normed_error"] / mean(LoopVar[ ,"F_corrected_normed_error"]),
                                                  digit = 5
                                                  )
assign(paste(SubNameString, j), LoopVar)

}

View(IAEA_C2_NoStdConditionResiduals1) 

【问题讨论】:

    标签: r variable-assignment


    【解决方案1】:

    assign 不是真正的问题,paste 函数的行为更多。这将构建一个带有空格的变量名:

    assign(paste(SubNameString, j), LoopVar)
    
    #simple example
    > assign(paste("v", 1), "test")
    > `v 1`
    [1] "test"
    

    ,,,, 所以你需要通过在它的名字周围加上反引号来获取它的值,这样这个空间就不会被误解为一个可解析的分隔符。看看你输入时会发生什么:

    `IAEA_C2_NoStdCondition 1`
    

    ...从这里开始,使用paste0 来避免这个问题。

    【讨论】:

    • @BondeDust。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2021-09-04
    • 2016-02-09
    • 2020-07-27
    • 1970-01-01
    相关资源
    最近更新 更多