【发布时间】:2019-11-09 09:23:49
【问题描述】:
为了让我的问题可重现,我有以下向量:
trialvector <- as.vector(c("K", "K", "m", "m", "K"))
这个函数试图将这个向量转换为一个将“K”转换为数字 3 和“m”转换为数字 6 的函数,我想将此向量分配给一个名为 multiplier 的变量:
Expcalc <- function(vector) {
multiplier <<- vector(mode = "numeric", length = length(vector))
for (i in seq_along(vector)) {
if (vector[i] == "K") {
multiplier[i] <- 3
} else if (vector[i] == "M" | i == "m") {
multiplier[i] <- 6
} else {
multiplier[i] <- 0
}
}
}
我没有得到我想要的输出(一个 6 和/或 3 的向量,具体取决于 trialvector 中的哪个字符,我得到一个全零的向量。这个错误:
警告信息: 1:在 Expcalc(trialvector) 中:强制引入的 NA 2:在 Expcalc(trialvector) 中:强制引入的 NAs
我做错了什么?
【问题讨论】:
-
使用矢量化的
ifelse,不需要循环。类似ifelse(trialvector == 'k', 3, ifelse(trialvector == 'm', 6, NA))或使用factor,即factor(trialvector, levels = c('K', 'm'), labels = c(3, 6))或花哨的chartr,即chartr('Km', '36', trialvector) -
问题是在我的原始向量中我有大约 70 个级别,并且在
factor()函数中建立 70 个标签是不可行的。我还需要类似于else的东西来收集我想要零的所有情况。 -
我给了你 3 个选项。选择你最喜欢的:)
标签: r function if-statement