我需要动态创建数据框并引用它们。到目前为止,我可以动态创建数据框,如:
master<-c("bob","ed","frank")
d<-seq(1:10)
for (i in 1:length(master)){
assign(master[i], d )
}
ed[6]
现在,如果我这样做
ls()
我可以看到有一个&#34; ed&#34;宾语。我想引用一个操作它中的数据而不引用名称。
即。而不是做&#34; ed [6]&#34;
我想要&#34; ed&#34;在一个变量中:
master[2][6] # BUT THIS DOES NOT WORK
或
df<-"ed" #this does not work either
df[6]
我动态地命名数据帧是我可以动态引用它们的。我怎么能这样做?
谢谢!
答案 0 :(得分:0)
使用get。
get(master[2])[5]
get(master[2])[2]
如果要设置值,则需要使用assign。但要小心,它会将值分配为一个整体。我的意思是你不能设置一个矢量值,你需要设置整个矢量。
master<-c("bob","ed","frank")
d<-seq(1:10)
for (i in 1:length(master)){
assign(master[i], d )
}
ed[6]
get(master[2])[5]
get(master[2])[2]
temp <- get(master[2])
# assign value 20 to index 5
assign("ed",20)
assign("ed[6]",20) # it creates a variable named "ed[6]", not what you want
ls(pattern = "^ed.*$")
temp[6] = 20
assign("ed",temp)
rm(temp) # remove temp if you do not need it
get("ed")[6]
答案 1 :(得分:0)
您可以像Atilla建议的那样使用get
,但对于这样的情况,您最好创建一个列表,然后再按列表索引引用对象。创建一个对象然后是一大堆更整洁,并且引用内容很简单。
# create empty list
my_list <- list()
# put stuff in the list
for (i in 1:length(master)) {
my_list[[i]] <- d
}
# get the 6th element from the 2nd object in my_list
my_list[[2]][6]