R: Как передать имя DataFrame в функцию, если имя создано функцией - PullRequest
0 голосов
/ 28 июня 2018

У меня есть пример, когда один элемент данных создается в функции gdfedit gWidgets, но имя не является фиксированным (изменяется в соответствии с другим вектором). Я хочу передать этот фрейм данных другой функции, но не знаю, как.

Мой код немного сложнее, но этот пример подводит итог моей проблемы:

 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. 

Я мог бы пройти через вектор 'x' с помощью цикла for () и if (), но я хочу иметь более элегантное решение. Есть идеи?

1 Ответ

0 голосов
/ 28 июня 2018

Вам нужно вызвать 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")

, который дает (если я сохраню df1 «как есть» в df01)

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

( Примечание: Я немного изменил определение вашей функции)

...