R:如果名称是由函数创建的,如何将 DataFrame 的名称传递给函数

R: How to pass a name of DataFrame to a function, if a name is created by function

我有一个例子,其中一个数据帧是在gWidgets的gdfedit函数中创建的,但名称不固定(根据另一个向量而变化)。我想将此数据框传递给另一个函数,但我不知道如何。

我的代码有点复杂,但这个例子总结了我的问题:

 example <- function(df1, df2){
   df1$v3 <- df2$v1
 }

 x <- "01"
 df1 <- data.frame(v1=c(1,2,3), v2=c(6,7,8))
 gdfedit(items= df1, name=paste("df", x, sep = '' ), container = gwindow() , expand=TRUE)

 example(df1, paste("df", x, sep = '' )) #this obviously doesn't work. 

我可以使用 for() 和 if() 循环遍历 'x' 的向量,但我想要更优雅的解决方案。有任何想法吗?

您需要在将数据帧传递给您的函数时调用 get

library(gWidgetsRGtk2)
library(RGtk2Extras)

#your defined function
example <- function(x1, x2, x1_col, x2_col){
  x1[, x1_col] <- x2[, x2_col]
  return(x1)
}

#sample data
x <- "01"
df1 <- data.frame(v1 = c(1,2,3), v2 = c(6,7,8))

#edit dataframe and save it as a new dataframe
gdfedit(items = df1, name = paste0("df", x), container = gwindow(), expand = T)

#call function
example(df1, get(paste0("df", x)), "new_column", "v1")

这给出(如果我在 df01 中保存 df1 'as is')

  v1 v2 new_column
1  1  6          1
2  2  7          2
3  3  8          3

(注意:我稍微修改了你的函数定义)