有没有人知道R包解决了最长的常见子串问题?我正在寻找可以对矢量起作用的快速的东西.
我最近在R中实现了二叉树搜索算法,在此之前我使用了类似链接的数组结构.如果R中有指针(不是C指针,而是对象的引用),这些算法会容易得多.我想知道是否有解决方法.我根本不认识S4; 也许在那个框架中有可能?我会避免与环境相关的技巧,因为传递引用有点过于复杂.我会避免调用C或C++的STL.毕竟这是一个R问题.
如果我想在RI中打印表示对象的符号,可以使用quote():
> X <- list()
> print(quote(X))
X
>
Run Code Online (Sandbox Code Playgroud)
但是,如果我有这个功能
h <- function(Y){
quote(Y)
}
Run Code Online (Sandbox Code Playgroud)
然后
> h(X)
Y
>
Run Code Online (Sandbox Code Playgroud)
在R中是否可以编写这样的函数
> h(X)
X
Run Code Online (Sandbox Code Playgroud)
?
是rjava至R连接到Java的唯一途径?我问,因为网页末尾有免责声明:
此接口使用Java反射API来查找正确的方法,因此它更慢并且可能不正确(适用于简单示例,但可能不适用于更复杂的示例).目前,在程序中不鼓励使用它,因为它可能在将来发生变化.
这有点令人担忧.你是如何解决这个问题的?我知道Rweka有一个独立的界面,所以我可能会考虑那个包,但也许很多R用户已经经历过这些痛苦.
标题是自成一体的问题.一个例子澄清了它:考虑一下
x=list(a=1, b="name")
f <- function(){
assign('y[["d"]]', FALSE, parent.frame() )
}
g <- function(y) {f(); print(y)}
g(x)
$a
[1] 1
$b
[1] "name"
Run Code Online (Sandbox Code Playgroud)
而我想得到
g(x)
$a
[1] 1
$b
[1] "name"
$d
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
一些评论.我知道我的原始例子中有什么问题,但我用它来明确我的目标.我想避免使用<< - ,并希望在父框架中更改x.
我认为我对环境的理解是原始的,任何引用都是值得赞赏的.
我有一个nxp矩阵,想要计算定义为的nxn矩阵B.
B[i, j] = f(A[i,], A[j,])
Run Code Online (Sandbox Code Playgroud)
其中f是接受适当维度的参数的函数.在R中计算这个有一个巧妙的技巧吗?f是对称的和肯定的(如果这有助于计算).
编辑:Praneet要求指定f.这是一个好点.虽然我认为为任何函数提供有效的解决方案会很有意思,但在f(x,y)为base :: norm(xy,type ='F'的重要情况下,我会从高效计算中获得很多里程数. ).
请考虑以下代码:
> A <- matrix(1:12, ncol=4)
> colnames(A) <- letters[1:4]
> class(A) <- c("foo", "matrix")
Run Code Online (Sandbox Code Playgroud)
当A是子集时,它会丢失"foo"类标签:
> class(A[1:2,])
[1] "matrix"
Run Code Online (Sandbox Code Playgroud)
矢量也是如此.然而,data.frames不会发生同样的情况:
> B <- as.data.frame(A)
class(B) <- c("foo", "data.frame")
> class(B[1:2,])
[1] "foo" "data.frame"
Run Code Online (Sandbox Code Playgroud)
通常,将泛型函数应用于对象会保留class属性.不适用于矩阵/数字/整数对象.为什么?并且可以避免这种行为吗?
我希望能够做这样的事情,这显然是不允许的。
import qualified Data.Map as Map
x = Map.fromList [
("Name", ["John", "Steve", "Kelly", "Zoe"]),
("Surname", ["Smith", "Lee", "Ng", "White"]),
("Age", [1, 2, 3, 4])
]
Run Code Online (Sandbox Code Playgroud)
一种可能的解决方案是创建这样的类型:
data L = LInt [Int] | LString [String]
x = Map.fromList [
("Name", LString ["John", "Steve", "Kelly", "Zoe"]),
("Surname", LString ["Smith", "Lee", "Ng", "White"]),
("Age", LInt [1, 2, 3, 4])
]
Run Code Online (Sandbox Code Playgroud)
这是不可取的。有没有更好的方法?
我的实际用例:非常广泛,我正在尝试实现 dplyr ( http://cran.r-project.org/web/packages/dplyr/vignettes/introduction.html ) 的一部分,可以将其视为“语法数据的”。Dplyr 具有用于表格数据的列和行选择以及行的分组和连接的表达式,其中行数可以是数百万,列数可以是数百。我现在关心的不是数据大小,而是生成与该包类似的功能和工作流程的能力
我想使用异构列表列表.为此,我定义了一个简单的代数数据类型:
data T = LInt [Int]
| LChar [Char]
deriving (Eq, Ord, Show)
Run Code Online (Sandbox Code Playgroud)
所以我现在可以这样:
x = [LInt [1, 2, 3], LChar "test"]
Run Code Online (Sandbox Code Playgroud)
我的问题:这种类型可以成为Functor的一个实例吗?这会很有用; 例如,选择x中列表的元素,如
fmap (!!2) LChar "test" => 's'
Run Code Online (Sandbox Code Playgroud)
在我看来,这是不可能的.除了问题的动机之外,我相信答案可以帮助我更好地理解代数数据类型.
我有一个关于定义类型类实例的基本问题.我使用Show类型类作为示例,我只考虑类中的函数show.像Bool这样的具体类型的Show实例很简单
instance Show Bool where
show x = {function of x here}
Run Code Online (Sandbox Code Playgroud)
但对于String,它不是:
instance Show String where
show x = {function of x here}
Run Code Online (Sandbox Code Playgroud)
产生可以理解的错误
Illegal instance declaration for ‘Formatter String’
(All instance types must be of the form (T t1 ... tn)
where T is not a synonym.
Use TypeSynonymInstances if you want to disable this.)
In the instance declaration for ‘Formatter String’
Run Code Online (Sandbox Code Playgroud)
当然不允许以下内容:
instance Show [Char] where
show x = {function of x here}
Run Code Online (Sandbox Code Playgroud)
我可以定义一个新类型
newtype String2 = …Run Code Online (Sandbox Code Playgroud)