我正在处理一个至少包含三个变量(波长,辐照度,x)的数据框,我对其进行了旋转,以便每个波长都是一个新行,因此允许我在每个波长上运行lm()并提取系数,所以我可以看到x如何随波长和辐照度变化。
但是,我能够使其正常工作的唯一方法是在每个波长上显式运行lm()。这对于较大的数据帧将不可行,因为较大的数据帧将具有数百个随波长和辐照度变化的参数。
我感觉可以使用'apply'或编写一个循环来解决,但是我没有运气使它们工作。
请参见下面的问题示例。
我还是很新,所以任何指针都值得赞赏
irr = rnorm(33, 10, 3)
wave = c(290, 290, 290, 300, 300, 300, 310, 310, 310, 320, 320, 320, 330, 330, 330, 340, 340, 340, 350, 350, 350, 360, 360, 360, 370, 370, 370, 380, 380, 380, 400, 400, 400)
x = rnorm(33, 50, 2)
df <- as.data.frame(cbind(wave, irr, x))
df_wide <- df %>%
pivot_wider(names_from = "wave",
values_from = "x")
"290_lm" <- lm(df_wide$`290` ~ df_wide$irr)
"300_lm" <- lm(df_wide$`300` ~ df_wide$irr) #etc through each wavelength
## Attempt at loop
for (i in 2:(ncol(df_wide))){
irr <- df_wide[2][i]
lm_function <- paste(irr,
sep = "~")
df_lm = lm(lm_function,
data = df_wide[2:12])
}
如果保持长格式,这可能会容易很多。只需使用lapply
子集数据即可。使用setNames
,结果列表将获得漂亮的名称。
据我所知,您的问题与purrr::map
的示例相同,因此无需广而告之。
其他解决方案
或类似如下: