2013-03-12 70 views
2

可以說我有一個函數接受總是列表的一部分的變量。獲取作爲函數參數提供的列表變量的名稱

myfun <- function(x$name,y$name) { 
# stuff 
} 

我想要做的是獲取使用的名稱。

alist <- list(Hello=1,Goodbye=2) 

myfun(alist$Hello, alist$Goodbye) { 
# I want to be able to work with the characters "Hello" and "Goodby" in here 
} 

所以,在我的函數中,我將如何得到字符「你好」和「再見」。鑑於alist$Helloalist$Goodbye

+3

在這種情況下,爲什麼不通過'alist' func如:myfun < - function(x)'參數並使用'names(x)'訪問名稱? – Arun 2013-03-12 14:17:25

+1

下載者應該有禮貌地評論爲什麼。 – 2013-03-12 14:29:30

回答

9

記得plot.default這是否符合deparse(substitute(

a <- list(a="hello",b=c(1,2,3)) 
f <- function(x,y) { print(deparse(substitute(x))); print(deparse(substitute(y))) } 
f(a$a,a$b) 
#[1] "a$a" 
#[1] "a$b" 
+0

這導致我''報價'這看起來像它不貓()任何其他的屏幕。因此+1和複選標記。 'as.character(quote(x))[3]'給了我想要的東西。 – 2013-03-12 14:31:16

+0

一個問題是,該列表不需要包含您正在訪問的元素......使用此方法。 'f(a $ x,a $ y)'給出'$ x,$ y',我不確定是否可取。 – Arun 2013-03-12 14:31:20

+0

@Arun如果參數出現在'TRUE'上,則'is.null'可能會引發錯誤或警告。 – 2013-03-13 02:20:26

6

事情是這樣的,也許:

myfun <- function(x) { print(substitute(x))} 
myfun(iris$Sepal.Length) 
## iris$Sepal.Length 
+0

鑑於您同時回答+1。複選標記會降低分數 - 他需要更多分數! – 2013-03-12 14:33:46

3

我會用一個list參數創建函數:

myfun <- function(l) { 
    print(names(alist)) 
} 
myfun(alist) 
# [1] "Hello" "Goodbye"