具有两个对象或向量的R中的函数“for”
我正在开发一个函数来执行两个矢量数据帧之间的操作,例如,使用函数:具有两个对象或向量的R中的函数“for”,r,function,for-loop,R,Function,For Loop,我正在开发一个函数来执行两个矢量数据帧之间的操作,例如,使用函数: > A <- c(1,2,3) > B <- c(2) > result <- c() > for (i in 1:length(A)) + { + for (j in 1:length(B)) + { + result <- (A*B) + } + } > result [1] 2 4 6 那么,我如何创建一个循环,对每行B执行针对a的操作呢 太多了
> A <- c(1,2,3)
> B <- c(2)
> result <- c()
> for (i in 1:length(A))
+ {
+ for (j in 1:length(B))
+ {
+ result <- (A*B)
+ }
+ }
> result
[1] 2 4 6
那么,我如何创建一个循环,对每行B执行针对a的操作呢
太多了 在循环中,不使用变量i和j,而是计算乘积A*B 您可以使用sapply生成所需的结果: 或矩阵乘法:
A %*% t(B)
# [,1] [,2]
# [1,] 2 4
# [2,] 4 8
# [3,] 6 12
正如错误所说,A的长度必须是B的1的倍数:如果它们具有相同的长度,A*B将返回相同长度的向量,其项将是A和B的相应元素A[1]*B[1],…A[n]*B[n]的乘积 如果lengthA=k*lengthB,k>1,你将得到一个与a长度相同的向量,其中a[1]*B[1]…a[l]*B[l],a[l+1]*B[1],a[l+2]*B[2]…a[kl]*B[l],其中l是B长度,因此kl是长度 这里,3是1的倍数,但不是2的倍数,因此会出现错误。通常,您可以使用外部: B,你在找外套吗?如果你想对data.frames进行操作,你应该用data.frames给出一个例子,并显示预期的结果。你的意思是result=cresult,A[i]*B[j]?如果是这样的话,最终最好预先分配结果
Warning messages lost:
"Major object length is not a multiple of the length of a lower one."
> result
[1] 2 8 6
A=c(1,2,3); B=c(2,4)
sapply(A, "*", B)
# [,1] [,2] [,3]
# [1,] 2 4 6
# [2,] 4 8 12
A %*% t(B)
# [,1] [,2]
# [1,] 2 4
# [2,] 4 8
# [3,] 6 12
outer(A, B, FUN='*')
# [,1] [,2]
# [1,] 2 4
# [2,] 4 8
# [3,] 6 12