r - 嵌套 for 循环中的打印输出和存储向量的结果不同。是什么赋予了?
问题描述
我相信这可能很简单,但我已经尝试了好几个小时。打印的输出是我想要的矢量。它正在做我想要的。
x1<-c(1,2,3,4)
x2<-c(1,0)
len<- length(filename)
output <- vector("numeric", 8)
for (i in x1){
for(j in x2){
print(sum(i+j))
output[i]<- i
}
}
output
但是,我很困惑为什么我会得到这两个不同的结果:
[1] 2
[1] 1
[1] 3
[1] 2
[1] 4
[1] 3
[1] 5
[1] 4
> output
[1] 1 2 3 4 0 0 0 0
如何将print
结果存储为向量?谢谢。
解决方案
根据?print
print 打印其参数并以不可见的方式返回它(通过 invisible(x))。
我们可能需要初始化一个sum1
对象sum(i + j)
(
sum1 <- NULL
output <- vector("numeric", 8)
for (i in x1){
for(j in x2){
sum1 <- c(sum1, i + j)
output[i]<- i
}
}
-输出
> sum1
[1] 2 1 3 2 4 3 5 4
print
关于“输出”和“输出”之间的区别。很明显 - print
ing 是在sum(i + j)
(和the一样sum
在这里是多余的) 上完成的,因为输出仅与值一起存储。向量的初始化也是一个数值向量,其值为 0,长度为 8i + j
sum
i
> output <- vector("numeric", 8)
> output
[1] 0 0 0 0 0 0 0 0
初始化也可以这样完成
> output <- numeric(8)
其中 x1 值的长度为 4。因此,在前 4 次迭代之后,没有什么可以填充 0 值保持原样。
在R
中,这也可以用outer
> c(t(outer(x1, x2, FUN = `+`)))
[1] 2 1 3 2 4 3 5 4
或与sapply
> c(sapply(x1, `+`, x2))
[1] 2 1 3 2 4 3 5 4
推荐阅读
- android - 如何将手表 apk 嵌入手机 apk?
- java - 我在实现“活动 FTP 服务器”时遇到问题
- html - 从不同的 Angular 6 组件访问用户输入
- android - 条目在 TreeMap 中是不公开的;无法从外部包访问
- sql - 在格式化字段中在哪里使用 FM 修饰符?
- protocol-buffers - 减少 protobuf 消息大小的最佳实践?
- url - Power BI over tabular - 将字段设置为 web url
- java - 在android中使用模型类时,Firestore FieldValue.ServerTimestamp 始终为空?
- android - Firebase Android 云函数更改超时
- java - 如何在 StdSerializer Jackson 中使用 JsonView