Я предполагаю, что основной проблемой c для решения здесь является Error in log(names(df)[i]) : non-numeric argument to mathematical function
. Это связано с тем, что вы явно не ссылаетесь на данные, когда кодируете свой код как formula= log(names(df)[i]) ~ log(names(df)[i-1]) ...
. как объяснено ниже:
library(tidyverse)
# Dummy dataset
Data <- tibble(A = runif(100),
B = runif(100))
# this works
lm(Data$B ~ Data$A) %>% broom::tidy()
# this works as well
lm(Data %>% pull(B) ~ Data %>% pull(A)) %>% broom::tidy()
# this will not work because you aren't referring to the variables within the lm() function
# but rather some random string that it does not understand
lm(names(Data)[2] ~ names(Data)[1], data = Data) %>% broom::tidy()
# A tidyeval solution for this
# Quoting your names
Name1 <- sym(names(Data)[2])
Name2 <- sym(names(Data)[1])
# Unquoting with the !! (bang bang) operator
lm(Data %>% pull(!!Name1) ~ Data %>% pull(!!Name2), data = Data) %>% broom::tidy()
Решение будет выглядеть следующим образом, хотя нет примеров данных, предоставленных для создания полного решения:
map(c(4,6,8,10,12,14,16),
~{
# the first part of your code
df <- df %>%
filter(names(df)[.x] > 0) %>%
pdata.frame(index=c("index","Year"))
# the tidyeval solution
Name1 <- sym(names(Data)[.x]) # Quoting
Name2 <- sym(names(Data)[.x-1]) # Quoting
df %>%
plm(formula = log(pull(Data,!!Name1)) ~ log(pull(Data,!!Name2)) + # Unquoting
frez + log(dd) + I((log(dd))^2) + preci + I(preci^2) + m7 + max.c + spei +lt + qt,
data= (.),
effect = c("individual"),
model = "within") %>%
coeftest(., vcov = function(x) vcovHC(x, method = 'arellano', cluster = 'group', type = 'HC3'))
}
)