R在for循环中分配变量

时间:2017-01-02 17:10:09

标签: r

我使用for循环在R中工作,以创建新的向量。 '文件'包含多个或多或少500行的多个数据框。

temp = list.files(pattern="*txt")
files = lapply(temp, read.delim) 

pos = c(1:100)
results = null

for (i in pos) {
    nameA = paste("A", i, sep = "_")
    nameC = paste("C", i, sep = "_")
    resA = assign(nameA, unlist(lapply(files, function(x) x$perA[x$position==i])))
    resC = assign(nameC, unlist(lapply(files, function(x) x$perC[x$position==i])))
    cbind(summary(resA), results) #incorrect
    cbind(summary(resC), results) #incorrect
}

现在我想表演'摘要'在resA& resC为' pos'中的所有值。我想将这些结果放在1个数据帧(结果)中。我现在该怎么办?

2 个答案:

答案 0 :(得分:1)

沿着这些方向:

# create a data.frame with 6 rows( since summary() returns a vector of 6 elements
df <- data.frame(1:6)
# set the rownames of df
rownames(df) = names(summary(1:6))  

for (i in pos) {
    nameA = paste("A", i, sep = "_")
    ...
    xA = unlist(lapply(files, function(x) x$perA[x$position==i]))
    xC = unlist(lapply(files, function(x) x$perC[x$position==i]))
    df = cbind(df, as.numeric(summary(xA)), as.numeric(summary(xC))) 
    assign(nameA, xA)
    assign(nameC, xC)
}

# set the column names of df
df[1] = NULL # initial column removed 
colnames(df) = c("id", paste0("summary",c("A","C"), rep(1:100, each = 2)))

答案 1 :(得分:0)

是否有理由单独保存每个向量而不是列表内?这将使进一步分析更容易。

我们仍然可以将您的矢量合并到summary的单个列表中。然后将cbind()函数应用于此列表,并使用list_A <- mget(ls(pattern="A_[0-9]")) list_C <- mget(ls(pattern="C_[0-9]")) summary_A <- do.call(cbind,lapply(list_A,summary)) summary_C <- do.call(cbind,lapply(list_C,summary)) summary_All <- data.frame(summary_A, summary_C) 将结果合并为一个矩阵。

{{1}}

当然,在环境中是否有其他具有相同命名模式的对象时,必须要小心。