2017-02-27 108 views
-2

我想动态地改变循环中变量的类型。现在,我有下面的代码行动态命名变量R

assign(paste("contractrenewal",i, 
      "[,\"SContract Product ID from Object\"]",sep = ""), 
     as.character(paste("contractrenewal",i, 
          "[,\"SContract Product ID from Object\"]", sep = ""))) 

在这里,我从1到18,我有18个dataframes是如下(contractrenewal1contractrenewal2,...,contractrenewal18)。我在每个这样的数据框名称SContract Product ID from Object中都有一列是int类型的,我希望它是字符类型。

上面的代码执行得很好,但没有达到我在找的东西。我环顾四周,并没有能够找到这样

+3

你正在以非R的方式去做事。 'assign()'只能和变量名(符号)一起使用。类似'd [i]'的是**不是变量名称。 '[]'实际上是一个函数调用。如果你提供了一个[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),我们可以建议一个更好的方法, 。 – MrFlick

+4

[使用数据帧列表](http://stackoverflow.com/a/24376207/903061)。 – Gregor

回答

2

任何一个生动的(也许是脏)FIX:

按照Gregor's link,并把你所有的数据帧到一个列表。

(要重现你的例子,我做了我自己的名单:)

cr.list <- list() 
for (i in 1:18) { 
    cr.list[[i]] <- data.frame("SContract Product ID from Object" = 
           as.integer(c(123, 412))) 
} 

然后你就可以通过列表循环:

for (i in 1:18) { 
    cr.list[[i]][, "SContract.Product.ID.from.Object"] <- 
    as.character(cr.list[[i]][, "SContract.Product.ID.from.Object"]) 
} 

现在你可以看到你的变量是character使用str(cr.list)