我尝试通过相互依赖的不同步骤来模拟数据帧中的更改。让我们尝试以一个非常简单的示例来说明我的问题。
我创建一个具有两列的数据框
a=runif(10)
b=runif(10)
data_1=data.frame(a,b)
data_1
a b
1 0.94922669 0.47418098
2 0.26702201 0.79179699
3 0.57398333 0.25158378
4 0.52724079 0.61531202
5 0.03999831 0.95233479
6 0.15171673 0.64564561
7 0.51353129 0.75676464
8 0.60312432 0.85318316
9 0.52900913 0.06297818
10 0.75459362 0.40209925
然后,我想创建n个步骤,其中每个步骤都包括在i + 1处创建一个新的数据帧,它是i处数据帧的功能(我们称之为“无论如何”):data_2是data_1的转换, data_3是data_2等的转换。
iterations=function(nsteps)
{
lapply(1:nsteps,function(i)
{
data_i+1=whatever(data_i)
})
}
无论我使用什么功能,我都会看到一条错误消息:
Error in whatever(data_i) : object 'data_i' not found
有人可以帮我弄清楚我所缺少的吗?
答案 0 :(得分:0)
看看是否可以从以下示例中得到启发。
首先,将whatever
函数应用于上一个数据帧。
whatever <- function(DF) {
DF[[2]] <- DF[[2]]*2
DF
}
现在要使用的功能。我添加了一个额外的参数,数据框x
。
该函数从创建要返回的对象开始。列表data_list
中的每个成员都是上一个数据框的数据框功能。
iterations <- function(nsteps, x){
data_list <- vector("list", length = nsteps)
data_list[[1]] <- x
for(i in seq_len(nsteps)[-1]){
data_list[[i]] <- whatever(data_list[[i - 1]])
}
names(data_list) <- sprintf("data_%d", seq_len(nsteps))
data_list
}
并将iterations
应用于示例数据框。
df1 <- data.frame(A = letters[1:10], X = 1:10)
iterations(10, df1)
答案 1 :(得分:0)
您可能正在寻找assign
和paste
的组合:
assign(paste("data_", i + 1, sep = ""), whatever(data_i))