如果是foo <- list()
,我发现自己写了很多foo[[length(foo)+1]] <- bar
,而实际上我只想写push(foo, bar)
。
类似地(尽管不太常见),bar <- foo[[length(foo)]]
会比bar <- pop(foo)
好得多。
1.有没有更好的方法在R基上做这件事?
1.如果做不到这一点,有没有人编写了一个包,使这些基本的列表操作在语法上不那么痛苦?
让我头疼的是变量名的重复。
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个对象的列表。
5条答案
按热度按时间1tuwyuhd1#
可以改写为
以及
可以改写为
注意,对于像R这样的函数式语言,函数通常不应该改变传递给它们的参数值;通常你会返回一个新的对象,你可以把它赋值给其他地方。2这个函数应该没有“副作用”。3像
push/pop
这样的函数在其他语言中通常会修改一个传递过来的参数。nue99wik2#
虽然晚了几年,但是这里有一种需要最少输入的方法,注意
pop
从对象中删除了最后一个元素。示例:
zc0qhyus3#
piah890a4#
可以写成:
如果您担心重复变量名,我完全同意lapply的工作效率更高,无论是在性能上还是在整个代码的长度上。
2guxujil5#
这是简单和干净的关闭