更改R中动态选择的列表的值
我在baser中有很多列表,我想循环这些列表并对列表元素进行更改。我想在一行中进行此更改,硬编码每个列表的名称不是一个选项:更改R中动态选择的列表的值,r,R,我在baser中有很多列表,我想循环这些列表并对列表元素进行更改。我想在一行中进行此更改,硬编码每个列表的名称不是一个选项: a <- list(thing1=1:5, thing2=6:10) b <- list(thing1=1:5, thing2=6:10) for(list in c("a","b"){ an_element <- paste(list, "$thing1"
a <- list(thing1=1:5,
thing2=6:10)
b <- list(thing1=1:5,
thing2=6:10)
for(list in c("a","b"){
an_element <- paste(list,
"$thing1",
sep="") # i.e "a$thing1"
assign(an_element,20:25) # change value of element thing1 in lists
}
get("a$thing1") # shows change
a$thing1 # does not show change
a使用您的示例:
a <- list(thing1=1:5,
thing2=6:10)
a找到了解决方案
a <- list(thing1=1:5,
thing2=6:10)
b <- list(thing1=1:5,
thing2=6:10)
c <- list(thing1=1:5,
thing2=6:10)
for(list in c("a","b","c")){
assign("tempList",list)
tempList$thing1 <- 6:10
assign(list,tempList)
}
a$thing1 # shows change
b$thing1
c$thing1
a是否尝试使用字符串“a$thing1”替换a$thing1
中的值?您的assign
创建一个名为a$thing1
的向量(尝试键入'a$thing1`)。你到底想达到什么目的?可能有一种比赋值更好的方法。是的,我试图通过提供一个表示该对象的字符串来更改任意对象中的值。在我的问题中,将有许多列表,我需要通过循环对这些对象进行操作。编辑一个列表很容易,我需要确定哪个列表正在被编辑,动态的,由循环提供。这里的问题是我们需要处理任意一组列表。我们不能硬编码列表'a',这些列表必须像在循环中一样动态操作。“a”可能是一个包含所有列表的列表吗?你需要在某个时候参考这些列表,我不确定你找到了什么方法。可以接受。是的,那很好。有名字的列表,甚至是列表本身我不明白你说“不用硬编码所有列表的名字”是什么意思。for循环使用的c(“a”、“b”、“c”)不是一个硬编码的列表名称列表吗?我的说法很糟糕。我的意思是硬编码的重新分配
for(i in 1:length(anames)) {
a[[anames[i]]] <- 5*(i+2)+1:5
print(a[[anames[i]]])
}
# [1] 16 17 18 19 20
# [1] 21 22 23 24 25
for(i in 1:length(anames)) {
a[[i]] <- 5*(i+2)+1:5
print(a[[anames[i]]])
}
# same result
b <- lapply(a, function(x) {
x+15
})
b$thing1
#[1] 16 17 18 19 20
a <- list(thing1=1:5,
thing2=6:10)
b <- list(thing1=1:5,
thing2=6:10)
c <- list(thing1=1:5,
thing2=6:10)
for(list in c("a","b","c")){
assign("tempList",list)
tempList$thing1 <- 6:10
assign(list,tempList)
}
a$thing1 # shows change
b$thing1
c$thing1