这是assign
函数的帮助页面中的示例:
> a <- 1:4
> assign("a[1]", 2)
> a[1] == 2 # FALSE
> get("a[1]") == 2 # TRUE
我希望能覆盖对象a[1]
的第一个成员,而不是创建一个全新的对象a
。我试过这个:
> get("a")[1] <- 2
Error in get("a")[1] <- 2 :
target of assignment expands to non-language object
但它没有用。我希望get() <-
是一个有效的表达方式,但事实并非如此。有没有替代方案呢?
我想做的是:
我有很多对象(数据框):x11
x12
x13
x21
x22
x23
x31
。 ..(其中近20个)。所有这些对象都包含30年的每日数据。它们是使用:
> for(i in c("x11", "x12", "x13", ...)) {
> assign(i, read.csv())}
现在,我尝试使用以下代码处理我的数据:
> for(i in c("x11", "x12", "x13", ...)) {
> for(j in 1:n) {
> get(i)[j] <- "some.input"}}
它给了我这个信息:
Error in get("x11")[] <- "some.input" :
target of assignment expands to non-language object
我希望,我面临的问题是可以理解的。
答案 0 :(得分:0)
同意David的上述评论,您可以使用数据框列表来执行此操作。您的创建代码如下所示:
df_list <- lapply(c("x11", "x12", "x13", ...), function(i) {
read.csv(...)
})
和您的修改代码:
for(i in 1:length(df_list)) {
for(j in 1:n) {
df.list[[i]][j] <- "some.input"}}