相关疑难解决方法(0)

R中的懒惰评估是否受到影响?

我读了这个关于重命名对象的基本问题和@Shane对它的回答,指着我懒惰的评价.现在我想知道是否assign也懒得评价.就像这里一样:

assign("someNewName",someOldObject)
rm(someOldObject)
Run Code Online (Sandbox Code Playgroud)

为什么我想知道这样做的原因是以下用例:假设我有10K + R对象各自有两个属性叫originalNameadditionalName.现在我想编写一个函数,可以有效地让用户从一个名称切换到另一个名称,而不会丢失这两个属性.粗略喜欢这个......

编辑:基于@Hadley的输入我改变了我的代码.

switchObjectName <- function(x) {
  n1 <- attributes(x)$originalName
  n2 <- attributes(x)$additionalName
  objName <- deparse(substitute(x))
  if(objName == n1) {
    delayedAssign(n2,x,assign.env=.GlobalEnv)
  } else {
    delayedAssign(n1,x,assign.env=.GlobalEnv)
  }
  rm(list=c(objName),envir=.GlobalEnv)    
}
Run Code Online (Sandbox Code Playgroud)

这种方法效果很好,但是我说这rm句话是正确的.rm(objName,envir=.GlobalEnv)虽然objName肯定是一个字符因为它是结果,但我试过但是无法使它工作deparse(substitute(x).

r lazy-evaluation assign

21
推荐指数
1
解决办法
1297
查看次数

R的assign()函数何时适用?

我经常看到新手R程序员的问题,他们习惯于assign创建多个对象,然后在尝试为后续任务操作这些对象时遇到麻烦(最近的一个例子).

assign吸引新手用户,因为它具有动态属性(以编程方式创建变量名称,除了变量的值),并且似乎模仿了全局赋值的一些属性.它的直接名称也使它可能出现在各种问题类型的搜索中.

当然,更有经验的R程序员开始意识到assign创建难以阅读的代码,易于维护的代码,以及通过在高功能R语言中坚决避免的副作用类型的行为.

我在SO最初使用的所有问题上看到的每个问题assign最终在正确使用命名向量,列表或数据帧方面有更好的选择.生成的代码更易于遵循,更易于更改,并且通常性能更高.

所有这一切都是说,很容易找到为什么assign不好的例子.我的问题是:在什么情况下使用assign适当的,首选的或唯一的解决方案

r

8
推荐指数
1
解决办法
276
查看次数

R中的引用调用(使用函数修改对象)

我只是在R中弄湿了,并且惊讶地看到一个函数没有修改一个对象,至少它似乎是默认的.例如,我写了一个函数只是为了在表中的一个标签上粘贴一个星号; 它在函数内部工作,但表本身不会更改.(我主要来自Ruby)

那么,使用函数来改变R中对象的正常,可接受的方式是什么?如何在表格标题中添加星号?

  • 替换整个对象: myTable = title.asterisk(myTable)

  • 使用解决方法通过引用进行调用(例如,在TszKin Julian的R中通过引用调用中所描述的?

  • 使用函数以外的一些结构?对象方法?

r function

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

赋值运算符的函数形式是什么,[< - ?

是否有赋值运算符的函数形式?我希望能够用lapply调用作业,如果这是一个坏主意,我总是很好奇.

编辑:

这是一个玩具示例,显然有更好的方法可以做到这一点:

假设我有一个data.frames,dat列表,每个都对应一次实验.我希望能够添加一个新列"主题",并给它一个假名.我想的方式是这样的

lapply(1:3, function(x) assign(data.frame = dat[[x]], column="subject", value=x)
Run Code Online (Sandbox Code Playgroud)

输出可以是修改数据帧的列表,或者修改可以纯粹是副作用.

列表起始列表的输入

list(structure(list(V1 = c(-1.16664504687199, -0.429499924318301,  2.15470735901367, -0.287839633854442, -0.850578353982526, 0.211636723222015,  -0.184714165752958, -0.773553182015158, 0.801811848828454, 1.39420292299319 ), V2 = c(-0.00828185523886259, -0.0215669898046275, 0.743065397283645,  -0.0268464140141802, 0.168027242784788, -0.602901928341917, 0.0740511186398372,  0.180307494696194, 0.131160421341309, -0.924995634374182)), .Names = c("V1",  "V2"), row.names = c(NA, -10L), class = "data.frame"), structure(list(     V1 = c(1.81912921386885, 1.17011641727415, 0.692247839769473,      0.0323050362633069, 1.35816977313292, -0.437475434344363,      -0.270255715332778, 0.96140963297774, 0.914691132220417,      -1.8014509598977), V2 = c(1.45082316226241, 2.05135744606495,      -0.787250759618171, 0.288104852581324, -0.376868533959846,      0.531872044490353, -0.750375220117567, -0.459592764008714,      0.991667163481123, 1.31280356980115)), .Names = c("V1", "V2" ), row.names …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
146
查看次数

当名称存储在不同的向量中时,如何为对象指定名称

鉴于这两个对象:

v <- "new.name"

w <- 1:10
Run Code Online (Sandbox Code Playgroud)

我怎么能告诉我R将w重命名为new.name,所以我可以拥有它

  > new.name
 [1]  1  2  3  4  5  6  7  8  9 10
Run Code Online (Sandbox Code Playgroud)

谢谢

r

2
推荐指数
1
解决办法
55
查看次数

将大量文件从一个目录合并到R中的数据框中

我在一个目录中有大量数据文件(> 1000).我想将它们全部合并到R中的单个数据框中.它们都具有相同数量和类型的列.到目前为止我所拥有的是:

setwd("directory")
files <- list.files()
for (i in 1:length(files)) assign(files[i], read.csv(files[i]))
Run Code Online (Sandbox Code Playgroud)

这将为1000多个文件中的每个文件创建数据框.有没有办法合并它们,而不必输入所有1000多个文件名列表?

任何帮助,将不胜感激!

r

2
推荐指数
1
解决办法
1185
查看次数

在R中创建一系列命名对象(b1,b2,... b100)

所以我对此非常新,但我正在尝试使用顺序名称制作一堆对象.Box1到Box100,每个都是一个包含c(0,0)的对象.我的第一个是做一个for循环

for (i in 1:100 ) {
    Box"i" <- c(0,0)
}
Run Code Online (Sandbox Code Playgroud)

显然Box"i"不是有用的东西,我很难弄清楚如何正确地做到这一点.任何帮助,将不胜感激.

r

0
推荐指数
1
解决办法
52
查看次数

标签 统计

r ×7

assign ×1

function ×1

lazy-evaluation ×1