相关疑难解决方法(0)

使用改变参数的lapply

R教科书继续推广使用lapply而不是循环.即使对于带有参数的函数,这也很容易

lapply(somelist, f, a=1, b=2) 
Run Code Online (Sandbox Code Playgroud)

但是如果参数根据列表元素而改变怎么办?假设我的名单包括:

somelist$USA
somelist$Europe
somelist$Switzerland
Run Code Online (Sandbox Code Playgroud)

加上有anotherlist相同的地区,我想用这些不断变化的论点来讨价还价?例如,当f是比率计算时,这可能是有用的.

lapply(somelist, f, a= somelist$USA, b=anotherlist$USA) 
Run Code Online (Sandbox Code Playgroud)

是否有方法可以有效地运行这些区域?

编辑:我的问题似乎是我试图使用以前编写的函数没有索引...

ratio <-function(a,b){
z<-(b-a)/a
return(z)
}
Run Code Online (Sandbox Code Playgroud)

这导致了

lapply(data,ratio,names(data))
Run Code Online (Sandbox Code Playgroud)

这不起作用.也许其他人也可以从这个错误中吸取教训

r lapply

8
推荐指数
2
解决办法
7724
查看次数

将包含具有相同名称的对象的多个.RData文件合并到一个.RData文件中

我有很多.RData文件,包含我在之前分析中保存的一个数据帧,并且数据框对于每个加载的文件都具有相同的名称.所以例如使用load(file1.RData)我得到一个名为'df'的数据框,然后使用load(file2.RData)我得到一个名为'df'的数据框.我在想,如果这是在所有可能的,因为我需要一次加载所有这些,与每名所有这些.RData文件合并成一个大的.RData文件Df等于文件名称,这样我就可以使用不同的数据帧.

我可以使用下面的代码执行此操作,但它非常复杂,必须有一个更简单的方法来执行此操作...感谢您的建议.

假设我有3个.RData文件,并希望将所有文件保存在名为"main.RData"的文件中,并使用其特定名称(现在它们都以"df"形式出现):

all.files = c("/Users/fra/file1.RData", "/Users/fra/file2.RData", "/Users/fra/file3.RData")
assign(gsub("/Users/fra/", "", all.files[1]), local(get(load(all.files[1]))))
rm(list= ls()[!(ls() %in% (ls(pattern = "file")))])
save.image(file="main.RData")


all.files = all.files = c("/Users/fra/file1.RData", "/Users/fra/file2.RData", "/Users/fra/file3.RData")

for (f in all.files[-1]) {
  assign(gsub("/Users/fra/", "", f), local(get(load(f))))
  rm(list= ls()[!(ls() %in% (ls(pattern = "file")))])
  save.image(file="main.RData")
}
Run Code Online (Sandbox Code Playgroud)

storage r

5
推荐指数
2
解决办法
4470
查看次数

使用列表中的数据框:删除变量,添加新变量

使用两个数据帧df1df2定义列表dats

dats <- list( df1 = data.frame(a=sample(1:3), b = sample(11:13)),
    df2 = data.frame(a=sample(1:3), b = sample(11:13)))

> dats
$df1
  a  b
1 2 12
2 3 11
3 1 13

$df2
  a  b
1 3 13
2 2 11
3 1 12
Run Code Online (Sandbox Code Playgroud)

我想在每个数据框中删除变量a.接下来,我想添加一个变量,其中包含来自外部数据帧的每个数据帧的id,如:

ids <- data.frame(id=c("id1","id2"),df=c("df1","df2"))
> ids
  id  df
1 id1 df1
2 id2 df2
Run Code Online (Sandbox Code Playgroud)

为了放弃不必要的变量,我试着没有运气:

> dats <- lapply(dats, function(x) assign(x, x[,c("b")]))  
> Error in assign(x, x[, c("b")]) : invalid first …
Run Code Online (Sandbox Code Playgroud)

r data-manipulation lapply data-management

4
推荐指数
1
解决办法
1652
查看次数

标签 统计

r ×3

lapply ×2

data-management ×1

data-manipulation ×1

storage ×1