6

私はよく次の2行を書いています。簡潔な代替案はありますか?

      newObj  <- vals
names(newObj) <- nams

# This works, but is ugly and not necessarily preferred
'names<-'(newObj <- vals, nams)

私はこれに似たものを探しています(もちろん機能しません):

newObj <- c(nams = vals)

関数にまとめることもオプションですが、関数がすでに存在するのではないかと思います。

サンプルデータ

vals <- c(1, 2, 3)
nams <- c("A", "B", "C") 
4

2 に答える 2

14

あなたはsetNames機能が欲しい

# Your example data
vals <- 1:3
names <- LETTERS[1:3]
# Using setNames
newObj <- setNames(vals, names)
newObj
#A B C 
#1 2 3 
于 2013-02-02T22:17:32.547 に答える
5

このnames<-メソッドは、多くの場合(常にではないにしても)オブジェクトを内部的にコピーします。setNamesの単なるラッパーですnames<-

コードとメモリで名前と値を簡潔に割り当てたい場合は、またはパッケージsetattrのいずれかからの関数が参照によってこれを行います(コピーなし)bitdata.table

例えば

library(data.table) # or library(bit)
setattr(vals, 'names', names)

おそらく少し簡潔ではありませんが、簡単なラッパーを自分で書くことができます

name <- function(x, names){ setattr(x,'names', names)}


val <- 1:3
names <- LETTERS[1:3]
name(val, names)
# and it has worked!
val
## A B C 
## 1 2 3 

新しいオブジェクトに割り当てる場合、古いオブジェクトと新しいオブジェクトの両方に名前が付けられることに注意してください。

于 2013-02-13T05:20:54.207 に答える