搜索许多地方,我找不到任何关于在使用ifelse或apply时如何利用项目索引的指示。 举一个简单的例子,如果我想通过索引将向量中的值除,我可以在for循环中进行:
for( i in 1:length(vector) ){ vector[i] = vector[i] / i }
是否有一些内部变量可以在ifelse或apply语句中使用?
例如:vector = ifelse( is.finite(vector), vector/internal.index.variable, vector )
关于向量和矩阵?
感谢, 汤姆
答案 0 :(得分:1)
seq_along(x)
是你的朋友;它创建一个等于1:length(x)
的整数向量:
vec <- vec2 <- c(5, Inf, 7) # Need two copies to modify one in the loop
# Your for loop example
for ( i in 1:length(vec) ) {
vec2[i] <- vec2[i] / i
}
vec2
# [1] 5.000000 Inf 2.333333
# Accomplish the same thing with apply()
sapply(vec, '/', seq_along(vec))
# [1] 5.000000 Inf 2.333333
# Accomplish the same thing with ifelse()
ifelse(is.finite(vec), vec / seq_along(vec), vec)
# [1] 5.000000 Inf 2.333333
答案 1 :(得分:0)
a <- c(1,2,Inf)
a / seq_along(a)
由指数划分的无限仍然是无穷大。因此,无论如何,无限元素保持不变。