1

我有这个给我错误的功能: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.gridb. 一切正常,而不是改变b.

4

1 回答 1

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)))
于 2013-10-25T16:51:43.763 回答