2017-02-27 107 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)