您正在寻找的是get 和assign 函数。
例如,您可以像这样使用它:
df1 <- data.frame(v1 = 1:10, v2 = 1:10)
df2 <- df1
df3 <- df1
x <- c("df1","df2","df3")
for (i in x) {
# load the dataset "i" to the tmp-variable
tmp <- get(i)
# do something
tmp$v3 <- tmp$v1 + tmp$v2
# assign the tmp variable to the value of "i" again
assign(i, tmp)
}
# lets have a check
df1
#> v1 v2 v3
#> 1 1 1 2
#> 2 2 2 4
#> 3 3 3 6
#> 4 4 4 8
#> 5 5 5 10
#> 6 6 6 12
#> 7 7 7 14
#> 8 8 8 16
#> 9 9 9 18
#> 10 10 10 20
df2
#> v1 v2 v3
#> 1 1 1 2
#> 2 2 2 4
#> 3 3 3 6
#> 4 4 4 8
#> 5 5 5 10
#> 6 6 6 12
#> 7 7 7 14
#> 8 8 8 16
#> 9 9 9 18
#> 10 10 10 20
df3
#> v1 v2 v3
#> 1 1 1 2
#> 2 2 2 4
#> 3 3 3 6
#> 4 4 4 8
#> 5 5 5 10
#> 6 6 6 12
#> 7 7 7 14
#> 8 8 8 16
#> 9 9 9 18
#> 10 10 10 20
改进
话虽如此,您可能不想这样做,而是尝试使用 apply-family 命令。
我通常倾向于大量使用lapply-函数。在您的情况下,它看起来像这样:
# create some data again
df <- data.frame(v1 = 1:10, v2 = 1:10)
# create three data-frames in a list
# here you would for example, load the dataframes from your source into the list
df_list <- lapply(1:3, function(x) df)
str(df_list)
#> List of 3
#> $ :'data.frame': 10 obs. of 2 variables:
#> ..$ v1: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> ..$ v2: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ :'data.frame': 10 obs. of 2 variables:
#> ..$ v1: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> ..$ v2: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ :'data.frame': 10 obs. of 2 variables:
#> ..$ v1: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> ..$ v2: int [1:10] 1 2 3 4 5 6 7 8 9 10
# do some operations:
df_list2 <- lapply(df_list, function(d) {
# do something
d$v3 <- d$v1 + 100 * d$v2
return(d)
})
df_list2
#> [[1]]
#> v1 v2 v3
#> 1 1 1 101
#> 2 2 2 202
#> 3 3 3 303
#> 4 4 4 404
#> 5 5 5 505
#> 6 6 6 606
#> 7 7 7 707
#> 8 8 8 808
#> 9 9 9 909
#> 10 10 10 1010
#>
#> [[2]]
#> v1 v2 v3
#> 1 1 1 101
#> 2 2 2 202
#> 3 3 3 303
#> 4 4 4 404
#> 5 5 5 505
#> 6 6 6 606
#> 7 7 7 707
#> 8 8 8 808
#> 9 9 9 909
#> 10 10 10 1010
#>
#> [[3]]
#> v1 v2 v3
#> 1 1 1 101
#> 2 2 2 202
#> 3 3 3 303
#> 4 4 4 404
#> 5 5 5 505
#> 6 6 6 606
#> 7 7 7 707
#> 8 8 8 808
#> 9 9 9 909
#> 10 10 10 1010