我想在R中使用赋值运算符结束管道
我的目标(在伪R中):
data %>% analysis functions %>% analyzedData
Run Code Online (Sandbox Code Playgroud)
其中data和analyzeData都是data.frame.
我尝试了一些这方面的变种,每个都给出了一个独特的错误信息.我试过的一些迭代:
data %>% analysis functions %>% -> analyzedData
data %>% analysis functions %>% .-> analyzedData
data %>% analysis functions %>% <-. analyzedData
data %>% analysis functions %>% <- analyzedData
Run Code Online (Sandbox Code Playgroud)
错误消息:
Error in function_list[[k]](value) :
could not find function "analyzedData"
Error: object 'analyzedData' not found
Error: unexpected assignment in: ..
Run Code Online (Sandbox Code Playgroud)
更新:我想出这样做的方式是:
data %>% do analysis %>% {.} -> analyzedData
Run Code Online (Sandbox Code Playgroud)
这样,要对长管道进行故障排除/调试,可以将这两行放入管道中,以最大限度地减少代码重新运行并隔离问题.
data %>% pipeline functions %>%
{.}-> tempWayPoint
tmpWayPoint %>%
more pipeline functions …Run Code Online (Sandbox Code Playgroud) 当使用基础R串的功能,如gsub和grep,是否有任何缺点,因为习惯问题,总是指定perl = TRUE?这有什么缺点吗?
有了perl=TRUE,表达式可以做更多的事情(例如,你可以使用前瞻或后面的断言,或者你可以进行大小写转换\\U),并且性能也更快,正如文档所述.
那么,有什么缺点吗?这perl = TRUE不是默认的向后兼容性吗?当perl = TRUE时,我是否应该注意可移植性问题?
我想为数组定义一个不同的打印方法,但我担心我不了解S3调度.如果我明确地调用print(x),则会调用我的自定义打印方法,但如果我只是在控制台上键入x,则不会调用它.但是,如果我定义自定义S3类,则调用适当的print方法.
如果我尝试为print.numeric定义一个方法,会发生类似的事情
这是一个最小的例子:
print.array <- function(x, ...) cat("Hi!\n")
x <- array(1:8, c(2,2,2) )
print(x) # the print method defined above is called
# Hi!
x # the print method defined above is NOT called
Run Code Online (Sandbox Code Playgroud)
有没有人对正在发生的事情有任何见解?x在控制台上进行评估时,实际进行打印的功能是什么?
为什么这不起作用?
df <- data.frame(x=1:2, y = 3:4, z = 5:6)
df[] <- df[c("z", "y", "x")]
df
#> x y z
#> 1 5 3 1
#> 2 6 4 2
Run Code Online (Sandbox Code Playgroud)
请注意,名称是原始顺序,但数据本身已更改顺序.
这很好用
df <- data.frame(x=1:2, y = 3:4, z = 5:6)
df[c("z", "y", "x")]
#> z y x
#> 1 5 3 1
#> 2 6 4 2
Run Code Online (Sandbox Code Playgroud)