分配给R中的可变数据帧

分配给R中的可变数据帧,r,dataframe,assign,R,Dataframe,Assign,我试图将一列数据分配给现有数据框中的新列。数据帧在一个循环中从scores.d更改为scores.e。我想要的输出是用VAL填充scores.X$new.col,其中X替换为当前dfname dfnames <- c("d","e") scores.d <- data.frame(x = 1, y = 1:10) scores.e <- data.frame(x = 2, y = 10:20) vals <- 60:70 for (i in seq_along(dfna

我试图将一列数据分配给现有数据框中的新列。数据帧在一个循环中从scores.d更改为scores.e。我想要的输出是用VAL填充scores.X$new.col,其中X替换为当前dfname

dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 10:20)
vals <- 60:70

for (i in seq_along(dfnames)){
   assign(get(paste0("scores.",dfnames[i]))$new.col,vals)
}

Error in assign(get(paste0("scores.", dfnames[i]))$new.col, vals) : 
  invalid first argument
现在,通过名称列表替换粘贴过程,请注意对seq_的更改:

dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 11:20)
vals <- 61:70

# for demonstrative purposes only, these were created in a loop in my code
full.dfnames[1] <- "Scores.d"
full.dfnames[2] <- "Scores.e"

for (i in seq_along(dfnames)){ #added seq_along back for the name index

    dat<-get(full.dfnames[i]) #pull up the data 
    dat$new.col<-vals
    assign(full.dfnames[i],dat) #replace old data frame with new
}

>Error in assign(get(paste0("scores.", dfnames[i]))$new.col, vals) : 
      invalid first argument

我相信下面的工作可能不会像您希望的那样简化

dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 11:20)
vals <- 61:70

for (i in dfnames){ #don't need seq_along

    dat<-get(paste0("scores.",i)) #pull up the data 
    dat$new.col<-vals
    assign(paste0('scores.',i),dat) #replace old data frame with new

}

我相信下面的工作可能不会像您希望的那样简化

dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 11:20)
vals <- 61:70

for (i in dfnames){ #don't need seq_along

    dat<-get(paste0("scores.",i)) #pull up the data 
    dat$new.col<-vals
    assign(paste0('scores.',i),dat) #replace old data frame with new

}

首先,我想您需要vals=60:69来匹配x和y列的长度。第二,您是否希望使用scores.d$new.col=vals和scores.e$new.col=vals的效果,但使用更快的语法-我假设这是一个更大问题的一部分?不要使用assign创建许多变量。相反,学习如何使用列表和函数:@Dominik是的,这是一个大型脚本的一部分,该脚本对两个数据帧上的几列进行多次计算。这是我继承的代码,我正试图用我有限的Matlab知识简化它。每个VAL都将是该迭代分数所特有的一些计算。X.@Metrics,感谢链接,我将看一看。此时此刻,我的时间紧迫,所以我请求厄尔尽快解决问题。一旦我有空闲时间,我会花一些时间来扩展我的知识。首先,我想您会希望VAL=60:69与x和y列的长度相匹配。第二,您是否希望使用scores.d$new.col=vals和scores.e$new.col=vals的效果,但使用更快的语法-我假设这是一个更大问题的一部分?不要使用assign创建许多变量。相反,学习如何使用列表和函数:@Dominik是的,这是一个大型脚本的一部分,该脚本对两个数据帧上的几列进行多次计算。这是我继承的代码,我正试图用我有限的Matlab知识简化它。每个VAL都将是该迭代分数所特有的一些计算。X.@Metrics,感谢链接,我将看一看。此时此刻,我的时间紧迫,所以我请求厄尔尽快解决问题。一旦我有空,我会花一些时间扩展我的知识。太好了,谢谢你的回答。这就是我所尝试的,我保存了一个名称列表,并试图引用这些名称,但它始终给了我无效的第一个参数错误。请看我编辑的问题中的附加示例。太好了,谢谢你的回答。这就是我所尝试的,我保存了一个名称列表,并试图引用这些名称,但它始终给了我无效的第一个参数错误。请参见我编辑的问题中的附加示例。