......关于执行时间和/或记忆.
如果不是这样,请使用代码段进行证明.请注意,矢量化的加速不计算在内.增速必须来自apply(tapply,sapply,...)本身.
我有一个数据帧列表,我最终想要合并,同时保留其原始数据帧名称或列表索引的记录.这将允许我跨所有行的子集等.为了实现这一点,我想为每个数据帧添加一个新的变量"id",其中包含它所属的数据帧的名称/索引.
编辑:"在我的真实代码中,数据框变量是通过使用以下代码读取多个文件而创建的,所以我没有实际名称只有'files.to.read'列表中的那些我不确定它们是否会对齐使用数据框顺序:
mylist <- llply(files.to.read, read.csv)
Run Code Online (Sandbox Code Playgroud)
在几个帖子中突出了一些方法: 使用数据框架在列表中的drop-variables-add-new-ones和 使用lapply-with-changing-arguments
我尝试了两种类似的方法,第一种使用索引列表:
df1 <- data.frame(x=c(1:5),y=c(11:15))
df2 <- data.frame(x=c(1:5),y=c(11:15))
mylist <- list(df1,df2)
# Adds a new coloumn 'id' with a value of 5 to every row in every dataframe.
# I WANT to change the value based on the list index.
mylist1 <- lapply(mylist,
function(x){
x$id <- 5
return (x)
}
)
#Example of what I WANT, instead of '5'.
#> mylist1
#[[1]]
#x y id
#1 1 11 1
#2 2 …Run Code Online (Sandbox Code Playgroud) 我需要从R.每个列表元素在减去指定的值,这被提到的文章,对于这样的任务apply系列函数来代替循环.我试过以下:
# Define list
> a = 1:20
# Substraact this from each element
> substract_me = 5
# Function for substracting
> substract = function(x,y) { ret = x-y; return(ret) }
# The problem is that I do not know how to access the current array element and pass it to substract function
lapply(a, substract)
Run Code Online (Sandbox Code Playgroud)
这里提到匿名函数也可以使用,但它对我没有用,我得到语法错误.事实上,它看起来就像语法糖一样.问题仍然存在,我在使用lapply函数时需要一些占位符或其他东西,所以我可以访问当前的list元素:
lapply(a, function([WHAT TO ADD HERE???],substract_me) substract([WHAT TO ADD HERE???],substract_me))
Run Code Online (Sandbox Code Playgroud)
这可能是相关的,但我没有弄清楚过去的代码片段是如何工作的.