2016-03-13 2 views
1

Я написал функцию, которая выполняет анализ с data.frame. В начале функции я печатаю информацию о том, какие переменные берутся в функции. Поэтому я хочу распечатать информацию о используемом имени data.frame.R получить имя data.frame в функции

Но я не могу получить имя data.frame. Он не печатает имя data.frame, вместо этого печатает его содержимое, но не имя. Возможно ли напечатать имя data.frame, которое передается функции внутри функции.

tmpFuction <- function(DF){ 

print("#############") 
print("tmpFuction starts") 
print(paste("DF",DF,sep="=")) 
print("#############") 
return(1) 
} 
df1 <- data_frame(id=seq(1:4),x=rep(0,4)) 
df2 <- data_frame(id=c(1,2),x=c(0,4)) 
tmpFuction(10) 
tmpFuction("a") 
tmpFuction(df1) 
tmpFuction(df2) 

Выход. В течение последних 2-х примеров, которые я хочу быть распечатаны:

[1] "#############" 
[1] "tmpFuction starts" 
[1] "DF=df1" 
[1] "#############" 

[1] "#############" 
[1] "tmpFuction starts" 
[1] "DF=df2" 
[1] "#############" 
[1] 1 
> 

Но я получаю:

> tmpFuction(10) 
[1] "#############" 
[1] "tmpFuction starts" 
[1] "DF=10" 
[1] "#############" 
[1] 1 
> tmpFuction("a") 
[1] "#############" 
[1] "tmpFuction starts" 
[1] "DF=a" 
[1] "#############" 
[1] 1 
> tmpFuction(df1) 
[1] "#############" 
[1] "tmpFuction starts" 
[1] "DF=1:4"   "DF=c(0, 0, 0, 0)" 
[1] "#############" 
[1] 1 
> tmpFuction(df2) 
[1] "#############" 
[1] "tmpFuction starts" 
[1] "DF=c(1, 2)" "DF=c(0, 4)" 
[1] "#############" 
[1] 1 
> 
+2

deparse (заменяющие возвращает вам имя переменной, вы могли бы назвать его как это в вашей функции: 'DF <- data.frame (c (1,2)); print (paste ("DF", deparse (substitute (DF)), sep = "=")) ' –

+0

Я также нашел решение, передавая не data.frame как функциональную переменную, а передавая имя data.frame как строку, а затем использовать функцию get. dfString <- data_frame (id = c (1,2), x = c (0,4)); df <- get ('dfString') – aeliv002

+0

Должен также работать, однако в вашей попытке вы должны предоставить функцию get в среде, где определен ваш data.frame, иначе вы можете столкнуться с странным неправильным поведением в качестве другого кадра данных одно и то же имя может быть использовано. Поэтому мое предложение должно быть «более безопасным», если вы хотите, чтобы я представил его в качестве ответа? –

ответ

0

deparse (запасной()) возвращает вас имя переменной, вы можете назвать это, как это в вашей функции:

DF <- data.frame(c(1,2)); print(paste("DF", deparse(substitute(DF)),sep="=")) 
Смежные вопросы