【发布时间】: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