Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有两个对象或向量的R中的函数“for”_R_Function_For Loop - Fatal编程技术网

具有两个对象或向量的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