r - R 循环:每 3 行执行一个函数
问题描述
我有 2000 株小麦,在 40 天内生长。我想对每个植物执行 coeff 函数,以找到 3 个时间点产生的二次方程的系数。(a、b 和 c)
(1) 该coef(lm(y~poly(x,2,raw=TRUE))
功能完全按照我想要的方式工作。
(2) 但是,我的数据呈现方式需要我手动设置 x 和 y。
(3) 因此,我融化了我的数据,并订购了它。
(4) 我想制作一个循环,将“Day”列中的前三个设置为 x。然后我希望它采用“高度”列中的前三个并将其设置为 y。
然后我想执行 coeff 功能。
最后我希望它呈现我需要的系数输出,最好是在一个新的数据表中。
然后对所有小麦植物每三行重复一次,它们代表每个小麦 ID。
1)这个函数有效,给我系数:a,b,c
x<-c(1,2,3)
y<-c(1,10,4)
coef(lm(y~poly(x,2,raw=TRUE)))
2)这就是我的数据最初的样子
A = matrix(c(5, 4, 2, 10, 10, 4, 5, 15, 6),nrow=3, ncol=3)
colnames(A)<-c("10", "25", "40")
rownames(A)<-c("Wheat 1", "Wheat 2", "Wheat 3")
A
3)这是我的融化格式
A.melted<-as.data.frame(melt(A, id.vars="ID"))
A.melted<-A.melted[with(A.melted,order(Var1)),]
colnames(A.melted) <- c("WheatID", "Day", "Height")
A.melted$Day<-as.numeric(as.character(A.melted$Day))
A.melted
#
4)这就是我试图用我的循环做的......
- 每 3 行,
x<-A.melted[,2]
y<-A.melted[,3]
coef(lm(y~poly(x,2,raw=TRUE)))
- 编译系数的东西:a,b,c
我只是不熟悉循环的语法,我喜欢任何提示和建议。仔细阅读 Google 告诉我,除非绝对需要,否则不应执行循环,因为我可能会遇到更多问题 - 因此我也对非循环技术持开放态度。
解决方案
或者您可以apply()
直接在原始矩阵上执行:
x <- as.numeric(colnames(A))
apply(A, 1, function(y) coef(lm(y~poly(x,2,raw=TRUE))))
Wheat 1 Wheat 2 Wheat 3
(Intercept) -3.88888889 -0.555555556 6.666667e-01
poly(x, 2, raw = TRUE)1 1.11111111 0.477777778 1.333333e-01
poly(x, 2, raw = TRUE)2 -0.02222222 -0.002222222 -2.417315e-18
或者您可以转置数据并coef(...)
直接使用调用:
x <- as.numeric(colnames(A))
coef(lm(t(A) ~ poly(x, 2, raw = TRUE)))
推荐阅读
- swiftui - swiftUI 中的 NavigationView 使用
- linux - linux中的问题发生了一个JNI错误linux
- python - Python PDF 提取格式化文本(粗体、删除线、斜体、下划线)
- java - 带有 Discord JDA 350+ 线程的 java.lang.OutOfMemoryError
- python - 数字评估问题python
- bigcommerce - BigCommerce 类别名称作为车把中的过滤器
- linux - 如何通过 `awk` 或 `sed` 在 Ubuntu 终端变量的末尾添加一些字符?
- firebase - Firebase 通过一个请求发送多个通知数据
- python - SQLAlchemy 计算非空字符串的数量
- python - 通过添加其他横截面将 pandas MultiIndex 的横截面设置为 DataFrame