2013-06-05 15 views

答えて

19

、私はちょうどこの機能を書きました。 @ジョランの解決策によく似ていますが、すでに名前付き引数を踏まないようにします。コメントからコピー

namedList <- function(...) { 
    L <- list(...) 
    snm <- sapply(substitute(list(...)),deparse)[-1] 
    if (is.null(nm <- names(L))) nm <- snm 
    if (any(nonames <- nm=="")) nm[nonames] <- snm[nonames] 
    setNames(L,nm) 
} 
## TESTING: 
a <- b <- c <- 1 
namedList(a,b,c) 
namedList(a,b,d=c) 
namedList(e=a,f=b,d=c) 

:あなたはCRANパッケージから何かをしたい場合は、 Hmisc::llistを使用することができます。

Hmisc::llist(a, b, c, d=a, labels = FALSE) 

唯一の明白な違いは、個々のベクトルがこの場合にも名前を持っているということです。

+4

Hmisc :: llist eg llist(a1、a2、labels = FALSE)もあります。これは既に名前付き引数である – mnel

+0

を保護してくれてありがとう!私はこれを本当に好きです。私が取り組んでいるのは – fsmart

+1

です。入力引数が〜60文字よりも長い場合、これは失敗します。その場合、 'deparse()'長さ> 1のベクトルを生成し、 'sapply()'は文字ベクトルの代わりにリストを作成します。 – hadley

11

ランダムアイデア:

a1<-1 
a2<-20 
a3<-1:20 

my_list <- function(...){ 
    names <- as.list(substitute(list(...)))[-1L] 
    result <- list(...) 
    names(result) <- names 
    result 
} 

> my_list(a1,a2,a3) 
$a1 
[1] 1 

$a2 
[1] 20 

$a3 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 

(。アイデアはdata.frameにコードから盗まれた)

+3

+1 - これはうまくいくようです: 'my_list < - function(...)setNames(list(...)、substitute(alist(...)))' – flodel

+0

'Hmisc :: llist'例えば 'llist(a1、a2、labels = FALSE)' – mnel

4

もう一つのアイデア、偶然

sapply(ls(pattern='^a[0-9]'), get) 
$a1 
[1] 1 

$a2 
[1] 20 

$a3 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
+3

またはもっと単純に 'mget(c( 'a1'、 'a2'、 'a3'))'( 'mget'、not'spply(... 、get) ' – mnel

関連する問題