如果foo <- list()
,我发现自己写了很多foo[[length(foo)+1]] <- bar
,我真的只想写push(foo, bar)
。
同样(尽管频率低得多)bar <- foo[[length(foo)]]
会比bar <- pop(foo)
更好。
重复导致我死亡的变量名称。考虑:
anInformative.selfDocumenting.listName[[length(anInformative.selfDocumenting.listName)+1]] <- bar
编辑:
foo <- append(foo, bar)
对我不起作用
foo <- list()
for (i in 1:10) {
x <- data.frame(a=i, b=rnorm(1,0,1))
foo[[length(foo)+1]] <- x
}
str(foo)
按预期提供10个对象的列表。
foo <- list()
for (i in 1:10) {
x <- data.frame(a=i, b=rnorm(1,0,1))
foo <- append(foo, x)
}
str(foo)
提供20个对象的列表。
答案 0 :(得分:9)
foo[[length(foo)+1]] <- bar
可以改写为
foo <- append(foo, bar)
和
bar <- foo[[length(foo)]]
可以改写为
bar <- tail(foo,1)
请注意,使用R函数等函数式语言通常不会更改传递给它们的参数值;通常你会返回一个可以在别处分配的新对象。该功能应该没有副作用。&#34;其他语言中的push/pop
等函数通常会修改其中一个传递的参数。
答案 1 :(得分:0)
pushR = function(foo, bar){
foo[[length(foo)+1]] <- bar
foo
}
popR=function(foo){
foo[[length(foo)]]
}
foo <- list()
for (i in 1:10) {
x <- data.frame(a=i, b=rnorm(1,0,1))
foo <- pushR(foo, x)
}
popR(foo)
答案 2 :(得分:0)
foo <- list()
for (i in 1:10) {
x <- data.frame(a=i, b=rnorm(1,0,1))
foo[[length(foo)+1]] <- x
}
可以写为:
foo <- list()
for (i in 1:10) {
x <- data.frame(a=i, b=rnorm(1,0,1))
foo[[i]] <- x
}
如果您担心重复变量名。我同意通过lapply可以在整个代码的性能和长度方面更有效地工作。