【问题标题】:source(): Error: Replacement has length zerosource():错误:替换的长度为零
【发布时间】:2019-10-01 08:38:37
【问题描述】:

我不知道问题可能出在哪里,也不知道如何为您提供一些示例数据: 我有一个相当长的脚本,所以我把它分成几部分。第二部分是关于合并列。 我通过直接测量他们在过去 3 年的增量来测量山毛榉的增量。对于云杉来说更容易,我可以测量今年尖端的高度,然后测量螺纹的高度。就像今年的高度一样——下一个螺纹的高度是今年的增量。为了形成一个带有增量 I 的公共列(后来重命名它),我做了一个循环:

for (i in 1:nrow(df)) {
  if(df$Species[i]=="Fi"){
    print(i)
    df$`Length Beech 2019 [cm]`[i] <- df$`Height [cm] 2019`[i] - df$`Höhe Spruce 2018 [cm]`[i]
  } 
}

这部分在同一个脚本中运行完美。但是,如果我将重新排列数据框的整个部分复制到另一个 R 脚本中,

> source("2 RedesignDF.R")
[1] 2
Error in df$`Length Beech 2019 [cm]`[i] <- df$`Height [cm] 2019`[i] -  : 
  replacement has length zero

我犯了这个错误。前 10 个值是:

> str(df$`Length Beech 2019 [cm]`)
 num [1:113] 25 NA NA 25 23 NA 14.5 19.5 NA NA ...
> str(df$`Height [cm] 2019`)
 num [1:113] 302 186 188 306 258 ...
> str(df$`Höhe Spruce 2018 [cm]`)
 num [1:113] NA 176 178 NA NA ...

我的第一棵树是山毛榉,因此第一棵云杉的高度是空的。我认为这是我错误的根源,但我的困惑源于这样一个事实,即在同一脚本中运行它时这不是问题。

我做了一些示例数据:

Species <- c("Bu", "Fi", "Fi", "Bu", "Bu", "Fi", "Bu", "Bu", "Fi", "Fi")
`Length Beech 2019 [cm]` <- c(15.5, NA, NA, 23, 20, NA, 14, 18.5, NA,  NA)
`Height [cm] 2019` <- c(298, 179.5, 306.5, 306.5, 258.5, 188.5, 186, 301.5, 244, 192)
`Höhe Spruce 2018 [cm]` <- c(NA, 169.5, 271, NA,  NA, 170,  NA, NA, 233.5, 188)

df <- data.frame(Species, `Length Beech 2019 [cm]`, `Height [cm] 2019`, `Höhe Spruce 2018 [cm]`)

如果有人可以解释我,为什么会发生这种情况,我会很高兴。

谢谢你!

【问题讨论】:

  • 我将您的代码复制并粘贴到 RStudio 中,并在您的示例数据上运行它。我没有收到任何错误,包括从另一个脚本中获取它时。也许错误出现在前 10 行之后?您可以重新启动 R 会话并重试。
  • 这对我来说也很好,虽然我需要在构造 data.frame 时指定check.names=FALSE。我可以通过删除列来重新创建错误,检查列的拼写是否正确。
  • @meenaparam 有问题的代码正在运行,但没有产生输出。您可以看到 Length Beech 2019 列的 NA 与 Species == Fi 的差异不一样。
  • @Qiyuan 我之前没有理解你的问题,但我认为下面别人发布的答案给了你所追求的。
  • 谢谢大家,在我的电脑上它已经在第一棵云杉上崩溃了(因此print())。我会在另一台电脑上试试。

标签: r


【解决方案1】:

我执行了您的代码,发现它甚至没有在同一个脚本中产生输出。执行代码后你可以看到输出和输入一样。

我已经更正了您的代码,它正在生成输出。你也可以试试另一个 r 脚本。

for (i in 1:nrow(df)) {
  if(df$Species[i]=="Fi"){
    print(i)
    df$Length.Beech.2019..cm.[i] <- 
              df$Height..cm..2019[i] - df$Höhe.Spruce.2018..cm.[i]
  } 
}

【讨论】:

    【解决方案2】:

    我找到了答案。 Source 不能与 ä、ö、ü 和 ß 一起使用。所以要么必须删除所有这些,要么必须指定编码。

    source("2 RedesignDF.R", encoding = "UTF-8")
    

    无论如何,谢谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多