我有这个函数给我错误:1111Error in b[i] <- z : replacement has length zero
...我找不到原因......欢迎任何帮助:)
a <- expand.grid(rep(list(1:4), 4))
b <- numeric(256)
generating_numbers <- function() {
for(i in 1:nrow(a)) {
for(j in 1:ncol(a)) {
z <- cat(a[i,j]) }
b[i] <- z }
}
generating_numbers()
此处的目的是将expand.grid
生成的数字组合保存到b
中的列表中。一切正常,而不是改变b
的价值。
答案 0 :(得分:1)
如果您尝试保持代码基本相同,则需要以下内容:
a <- expand.grid(rep(list(1:4), 4))
b <- numeric(256)
generating_numbers <- function() {
for(i in 1:nrow(a)) {
z <- paste(a[i,],collapse=" ")
b[i] <- z }
}
generating_numbers()
第二个for()
循环是不必要的,因为您正在尝试获取数字组合,因此您不希望迭代每个列...
...但你可能在一行中完成同样的事情:
b <- apply(a,1,paste,collapse=" ")
......除非我误解了你想要做的事情。
<强>更新强>
我错过了关于列表中的部分,所以这里是你如何使用代码的修改版本将它们保存为元组:
a <- expand.grid(rep(list(1:4), 4))
generating_numbers <- function() {
b <- NULL
for(i in 1:nrow(a)) {
z <- a[i,]
b[[i]] <- as.numeric(z) }
return(b)
}
generating_numbers()
...或者您可以利用数据框如下所示的事实:
b <- as.list(as.data.frame(t(a)))