R:在 R 脚本中的列上循环函数
R: Loop function over columns in a R script
假设我们有以下 table,其中每两对变量要相互测试(原始 table 有更多的列):http://pastebin.com/igeMTaSB
我如何在 R 中创建一个循环,以便它在脚本中的每一行或两行应用一个函数?
示例代码:
library(urca)
library(lmtest)
# Load data (See link)
table = read.csv("test.csv", header = TRUE, sep=",")
table = data.frame(table)
table
# For each column in the table (a1-d2), do
VARselect(table$column,lag.max = 10,type="both")
# For each two sequent pairs in the table (a1+a2, b1+b2,c1+c2,d1+d2), do
grangertest(table$a1, table$a2, order = 1, na.action = na.omit)
对于单变量情况,使用sapply
或lapply
,例如:
myVarSel <- lapply(table, function(i) VARselect(i,lag.max = 10,type="both"))
如果您的变量对位于相邻位置(第 1,2 和 3,4 和 5,6 列),您可以按如下方式使用 lapply
:
myGtests <- lapply(seq(1, 5, 2), function(i) grangertest(table[[i]], table[[i+1]], order = 1,
na.action = na.omit))
如果变量以不同的方式排列,您可以使用 names(df)
上的 grep
之类的工具来定位它们。在 lapply
.
中提取
lapply
函数returns一个列表,其中每个元素都是相应函数的结果。
假设我们有以下 table,其中每两对变量要相互测试(原始 table 有更多的列):http://pastebin.com/igeMTaSB
我如何在 R 中创建一个循环,以便它在脚本中的每一行或两行应用一个函数?
示例代码:
library(urca)
library(lmtest)
# Load data (See link)
table = read.csv("test.csv", header = TRUE, sep=",")
table = data.frame(table)
table
# For each column in the table (a1-d2), do
VARselect(table$column,lag.max = 10,type="both")
# For each two sequent pairs in the table (a1+a2, b1+b2,c1+c2,d1+d2), do
grangertest(table$a1, table$a2, order = 1, na.action = na.omit)
对于单变量情况,使用sapply
或lapply
,例如:
myVarSel <- lapply(table, function(i) VARselect(i,lag.max = 10,type="both"))
如果您的变量对位于相邻位置(第 1,2 和 3,4 和 5,6 列),您可以按如下方式使用 lapply
:
myGtests <- lapply(seq(1, 5, 2), function(i) grangertest(table[[i]], table[[i+1]], order = 1,
na.action = na.omit))
如果变量以不同的方式排列,您可以使用 names(df)
上的 grep
之类的工具来定位它们。在 lapply
.
lapply
函数returns一个列表,其中每个元素都是相应函数的结果。