【发布时间】:2016-06-22 05:19:53
【问题描述】:
我想在列表中动态创建变量名并在 R 中为它们分配值,但我无法获得所需的结果。这是我的代码的逻辑:
在函数调用时:dat_in <- readf(1,2),根据产品和站点读取输入文件。读取后,将特定列(此处为第 13 列)分配给变量aot500。对于产品和站点的每个组合,我希望从函数返回这个变量。例如,我需要列表语句中的变量名称为aot500.AF、aot500.CM、aot500.RB,以便从此函数返回。我在return 声明中遇到问题。没有错误,但dat_in 中没有任何内容。我希望它有dat_in$aot500.AF 等。请告知return 声明中有什么问题。此外,我想在对函数的一次调用中读取所有组合的文件,比如使用 for 循环,我想知道 return 语句将如何处理更多变量的列表。
prod <- c('inv','tot')
site <- c('AF','CM','RB')
readf <- function(pp, kk) {
fname.dsa <- paste("../data/site_data_",prod[pp],"/daily_",site[kk],".dat",sep="")
inp.aod <- read.csv(fname.dsa,skip=4,sep=",",stringsAsFactors=F,na.strings="N/A")
aot500 <- inp.aod[,13]
return(list(assign(paste("aot500",siteabbr[kk],sep="."),aot500)))
}
【问题讨论】:
-
我不太明白你在做什么,但你为什么需要
assign?为什么不直接返回列表? -
尝试将参数 `env=.GlobalEnv` 放入函数的分配位。这应该将名为“aot500.XXXX”的对象返回到用户环境中。
-
与其在列表中动态分配变量名称,不如使用一个函数返回完整的数据框
inp.aod。然后是另一个功能,可以从那里过滤您想要的数据。提供 csv 文件的样本和所需输出的样本,以便我们帮助您设计此函数。 -
@AdamQuek 我已经尝试放置环境,但它仍然不能满足我的要求。我在下一条评论中分享了指向我的示例输入数据的链接。请帮忙!
-
@jkp 下面是如何制作reproducible example。
标签: r list assign variable-names